繁体   English   中英

使用对话框时Android崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM