使用对话框

时间:2016-05-03 17:26:05

标签: android dialog

我使用OKHttp:https://github.com/square/okhttp/wiki/Recipes库为我的Android应用程序做了一些请求,我正在使用库来显示对话框: https://github.com/afollestad/material-dialogs

这是解释我的问题的简化代码:

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,或者如果我在请求期间打开其他应用程序,当应用程序想要显示对话框时,应用程序停止并崩溃,我假设这是因为它找不到当前活动来创建我的DialogBox。 我有这个错误:

  

致命异常:   android.view.ViewRootImpl $ CalledFromWrongThreadException:只有   创建视图层次结构的原始线程可以触及其视图。

我尝试使用getApplication()getApplicationContext()getBaseContext()方法,但它向我展示了这条消息:

  

致命异常:   com.afollestad.materialdialogs.MaterialDialog $ DialogException:错误   窗口令牌,您无法在创建活动之前显示对话框   或隐藏后。

如何预防或解决这些崩溃?

1 个答案:

答案 0 :(得分:1)

当活动不在前台时,您无法显示正常的AlertDialog /对话框。但是you can consider to use an activity whose theme is set to that of a dialog有一个选项。它将作为对话框使用,并具有与Activity相同的生命周期属性。

您无法使用getApplication()getApplicationContext()getBaseContext()创建对话框,因为对话框归Activity所有。所以你应该使用Activity.this