2016-05-03 12 views
0

Ich verwende OKHttp: https://github.com/square/okhttp/wiki/Recipes Bibliothek eine Anfrage für mein Android-Anwendung zu tun, und ich bin mit einem Dialogfeld Bibliothek anzuzeigen: https://github.com/afollestad/material-dialogsAndroid Absturz, wenn Dialogfelder mit

Hier ist ein simplify Code mein Problem zu erklären, :

mLoginButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
          try { 
           post(SERVER_ADDRESS + "/login", userEmail, userPassword, new Callback() { 
            @Override 
            public void onFailure(Call call, IOException e) { 

            } 

            @Override 
            public void onResponse(Call call, Response response) throws IOException { 

             if (response.isSuccessful()) { 
              String responseUserConnected = response.body().string(); 

              if (/*user not find error*/) { 
               runOnUiThread(new Runnable() { 
                @Override 
                public void run() { 
                 Helper.loginError(LoginActivity.this); // CRASH HERE 
                 mLoginButton.setEnabled(true); 
                 mSignUpButton.setEnabled(true); 
                } 
               } 
              } 

             } 
            } 
           }); 
          } catch (IOException mE) { 
           mE.printStackTrace(); 
          } 


       } 
      }); 

Und hier ist der Code für meine DialogBox Methode:

public static void loginError(Context context){ 
     new AlertDialogWrapper.Builder(context) 
       .setCancelable(false) 
       .setTitle(R.string.login_error_title) 
       .setMessage(R.string.login_error_message) 
       .setPositiveButton(R.string.login_error_ok_button_text, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }).show(); 
    } 

Dieses adaequat im Allgemeinen, aber ich fand, dass, wenn ich die aktuelle Aktivität hier pausieren, es LoginActivity ist, oder wenn ich eine andere App während der Anfrage öffne, wenn die Anwendung das Dialogfeld anzeigen möchte, die Anwendung stoppt und abstürzt, nehme ich an, es ist, weil es ' Ich finde die aktuelle Aktivität, um meine DialogBox zu erstellen. Ich habe diesen Fehler:

Fatal Exception: android.view.ViewRootImpl $ CalledFromWrongThreadException: Nur die ursprünglichen Thread, der eine Ansichtshierarchie erstellt wurden, können ihren Standpunkt berühren.

ich zu verwenden versuchen, getApplication(), getApplicationContext(), getBaseContext() Methoden, aber es hat mir gezeigt, diese Nachricht:

Fatal Exception: com.afollestad.materialdialogs.MaterialDialog $ DialogException: Bad Fenster Token, Sie können keinen Dialog anzeigen, bevor eine Aktivität erstellt wurde oder nachdem sie ausgeblendet wurde.

Wie kann ich diese Abstürze verhindern oder beheben?

Antwort

1

AFAIK Sie können keinen normalen AlertDialog/Dialog anzeigen, wenn die Aktivität nicht im Vordergrund ist. Aber es gibt eine Option, die you can consider to use an activity whose theme is set to that of a dialog. Dies funktioniert sowohl als Dialog als auch mit den gleichen Lebenszykluseigenschaften einer Aktivität.

Sie können keinen Dialog mit getApplication(), getApplicationContext() oder getBaseContext() erstellen, da der Dialog einem Activity gehört. Also sollten Sie Activity.this

+0

Dank für Ihre Antwort verwenden, in dem Link sah ich eine Menge XML, aber wie kann ich Aktionen mit Schaltflächen hier implementieren? – fandro

+0

Denken Sie über die Weitergabe von Daten zwischen Aktivitäten wie Intents, onActivityResult –

+0

OK danke ich werde das versuchen – fandro