如何由于当前活动的OnStart调用而禁止AlertDialog消失

时间:2019-04-28 12:08:21

标签: android alertdialog dismiss

我是使用android studio进行Java编程的新手,我很好奇我的问题是否有一个非常简单的答案-但我没有找到。

我正在使用Firebase身份验证服务对注册和登录部分进行编程(这只是上下文,可能与解决问题无关)。

已实现的逻辑: 我建立了一个非常简单的(我的第一个:))AlertDialog,仅带有一个Ok按钮。当尝试登录的用户尚未验证其电子邮件时,此对话框应显示一条消息。 在Firebase发送回电子邮件未经验证的信息后,我致电对话框构建器。

问题: AlertDialog仅显示并立即消失,而无需等待任何交互。我调试了一下,发现在调用AlertDialog之后立即重新调用了活动的onStart。

这是消失AlertDialog的原因吗?如何避免呢?我没有在代码中显式调用OnStart方法。

这是我进行此活动的代码。

   @Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthListner);
}

// the calling funtion

                mAuth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            progressBar.setVisibility(View.GONE);
                            if (task.isSuccessful()) {
                                FirebaseUser user = mAuth.getCurrentUser();
                                if (mAuth.getCurrentUser().isEmailVerified())
                                {
                                    // user is verified, so this activity finishes and lets the firebase status listener prform the user log in.
                                    finish();
                                }
                                else
                                {
                                    // email is not verified, so a showMessageDialog method is invoked, which builds and show a corresponding alert with OK button.
                                    mAuth.signOut();
                                    showMessageDialog("Your email not verified. Please check the verification email sent to you and follow the instructions. If this is not valid please choose password reset!");
                                 }

                            } else {
                                try {
                                    throw task.getException();
                                } catch(FirebaseAuthInvalidCredentialsException e) {
                                    inputPassword.setError(getString(R.string.error_wrong_password));
                                    inputPassword.requestFocus();
                                } catch(FirebaseAuthInvalidUserException e) {
                                    inputEmail.setError(getString(R.string.error_unexistent_email));
                                    inputEmail.requestFocus();
                                } catch(Exception e) {
                                    Log.e(TAG, e.getMessage());
                                }
                                Toast.makeText(LoginActivity.this, getString(R.string.failed), Toast.LENGTH_LONG).show();
                            }

// the alert function

    private void showMessageDialog(String str) {
     AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setMessage(str);
    builder.setCancelable(false);
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}

0 个答案:

没有答案