[英]Android crash when using dialogs boxes
我正在使用OKHttp: https : //github.com/square/okhttp/wiki/Recipes库对我的Android应用程序进行一些请求,并且我正在使用一个库来显示对话框: https : //github.com/afollestad/物质对话
这是一个简化的代码来解释我的问题:
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();
}
}
});
这是我的DialogBox方法的代码:
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();
}
总体而言,此功能运行良好,但我发现当我在此处暂停当前活动时是LoginActivity,或者如果我在请求期间打开其他应用程序,则当应用程序要显示对话框时,应用程序停止并崩溃,我想这是因为它找不到当前活动来创建我的对话框。 我有这个错误:
致命异常:android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。
我尝试使用getApplication()
, getApplicationContext()
, getBaseContext()
方法,但它向我显示了以下消息:
致命异常:com.afollestad.materialdialogs.MaterialDialog $ DialogException:错误的窗口令牌,您无法在创建Activity或隐藏Activity后显示对话框。
如何防止或解决这些崩溃?
抱歉,当活动不在前台时,您将无法显示普通的AlertDialog /对话框。 但是, 您可以考虑使用一种将主题设置为对话框主题的活动 。 它可以用作对话框,并且具有与Activity相同的生命周期属性。
您不能使用getApplication()
, getApplicationContext()
或getBaseContext()
创建对话框,因为对话框归Activity
拥有。 所以你应该使用Activity.this
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.