Вызов диалогового окна "Невозможно добавить нулевой токен окна не для приложения

У меня возникла проблема с созданием диалогового окна предупреждения, которое показывает - Невозможно добавить нулевой токен окна не для приложения

public class Authenticator {

public static final String TAG = "Authenticator";

public static int getUserId(final String username, final String password) { 

    int retVal = 0;

    final QuickTexterApplication qta = QuickTexterApplication.getQuickTexterApplication();
    final Handler handler =  new Handler();

    Thread thread = new Thread(new Runnable() {
        public void run() {                
            Runnable displayGUIRun = new Runnable() {
                public void run() {
                    int userId = 0;
                    HttpURLConnection urlConnection = null;
                    String urlAuthenticator = qta.getResources().getString(R.string.urlAuthenticator);                      
                    try{
                        URL url = new URL(urlAuthenticator);
                        urlConnection = (HttpURLConnection) url.openConnection();

                        urlConnection.setRequestMethod("POST");         
                        urlConnection.setDoInput(true);
                        urlConnection.setDoOutput(true);

                        DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());

                        wr.writeBytes("username=" + username + "&");
                        wr.writeBytes("password=" + password);
                        wr.flush();
                        wr.close();

                        urlConnection.connect();

                        if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK){
                            Log.d(TAG,"HTTP OK");
                            InputStream inStream = urlConnection.getInputStream();
                            BufferedReader in = new BufferedReader(new InputStreamReader(inStream));

                            String inLine = in.readLine();                  
                            in.close();

                            Log.d(TAG,"inLine: " + inLine);
                            userId = Integer.parseInt(inLine);
                        }
                        else {
                            Log.d(TAG,"HTTP NOT OK");
                        }

                        String alertMsg = "Unable to establish connection to server";
                        switch(userId){
                            case -1 :
                                alertMsg = "You entered an invalid username or password";
                            case 0  : // This is where the exception occurs
                                AlertDialog.Builder alertBuilder = new AlertDialog.Builder(qta.getApplicationContext());
                                Log.d(TAG, alertMsg);
                                alertBuilder.setMessage(alertMsg)
                                            .setNeutralButton("Ok", new DialogInterface.OnClickListener(){
                                                @Override
                                                public void onClick(DialogInterface dialog, int id) {
                                                    dialog.cancel();
                                                }

                                            });
                                AlertDialog alert = alertBuilder.create();
                                alert.show();
                                break;

Я не могу использовать "this" в качестве контекста, потому что Authenticator не является Avitvity.
Но тогда getApplicationContext() также не работает...
То, что я пытаюсь сделать, это вызвать метод: getUserId() из класса Activity.

0
источник поделиться
1 ответ

Вы должны создать конструктор в своем классе Authenticator, который даст контекст вашему классу. И передайте контекст этому классу, вызвав этот конструктор.

  public class Authenticator {
       Context myContext;

   public Authenticator(YourActivity activity)
   {
    // TODO Auto-generated constructor stub
    this.myContext = activity;          
    }
  }

Таким образом, вы можете получить контекст для этого класса. Позвольте мне знать, что это работает или нет. :)

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос