I m using OKHttp : https://github.com/square/okhttp/wiki/Recipes library to do some request for my Android application and I am using a library to display Dialog Box : https://github.com/afollestad/material-dialogs
Here is a simplify code to explain my problem :
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();
}
}
});
And here is the code for my DialogBox method :
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();
}
This working fine in general but I found that when I pause the current activity here it's LoginActivity, or if I open an other app during the request, when the application want to show the dialog box, the application stop and crash, I suppose it's because it can't find the current activity to create my DialogBox. I have this error :
Fatal Exception: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
I try to use, getApplication()
, getApplicationContext()
, getBaseContext()
methods, but it showed me this message :
Fatal Exception: com.afollestad.materialdialogs.MaterialDialog$DialogException: Bad window token, you cannot show a dialog before an Activity is created or after it's hidden.
How can I prevent or solved these crashes ?