我是使用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();
}