警报对话框以及从firebase请求电子邮件验证链接的选项不起作用

时间:2017-04-06 21:49:30

标签: android firebase firebase-authentication

我正在尝试在用户登录活动中显示带有两个按钮("确定"和#34;发送电子邮件")的警告对话框。我正在使用firebase进行用户身份验证。在尝试实施警报对话框之前,我使用Toast.makeText来显示该电子邮件地址未经过验证,我的工作正常。但是现在我想让用户再次请求电子邮件验证链接,以防他们找不到上一封邮件。我经历了https://developer.android.com/guide/topics/ui/dialogs.html并且还经历了关于slackoverflow的一些问题和答案。我在这里面临的问题是即使我可以通过创建片段类来弹出对话框,但我无法使用此选项。因为我不知道从firebase到另一个类检索当前用户实例的方法。如果我尝试这样做,它总是粉碎应用程序。因此,我尝试在活动类中实现警报对话框,您可以在下面看到我的代码。

firebaseAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    progressDialog.dismiss();

                    if(task.isSuccessful()){

                        final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                        if (!user.isEmailVerified()){

                            AlertDialog.Builder emailAlert  = new AlertDialog.Builder(getActivity());
                            emailAlert.setTitle("Verify you email");
                            emailAlert.setMessage("The email address is not verified.");
                            emailAlert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    firebaseAuth.signOut();
                                    return;
                                }
                            });
                            emailAlert.setNegativeButton(R.string.send_email, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    user.sendEmailVerification()
                                            .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                @Override
                                                public void onComplete(@NonNull Task<Void> task) {
                                                    if (task.isSuccessful()){
                                                        Toast.makeText(LoginActivity.this, "Email Sent", Toast.LENGTH_SHORT).show();
                                                    }
                                                    firebaseAuth.signOut();
                                                    return;
                                                }
                                            });
                                }
                            });


                            emailAlert.create();
                        }
                        startActivity(new Intent(getApplicationContext(),HomeActivity.class));

                    }

                    else{
                        Toast.makeText(LoginActivity.this, "Login Failed, please make sure all feids are complete", Toast.LENGTH_SHORT).show();
                    }
                    progressDialog.dismiss();
                }
            });

没有运行时错误,但警报对话框未显示。有人可以指出我做错了什么吗?如果有更好的方法可以获得相同的结果,请告诉我。

1 个答案:

答案 0 :(得分:0)

首先替换

  

AlertDialog.Builder emailAlert = new AlertDialog.Builder(getActivity());

  

AlertDialog.Builder emailAlert = new AlertDialog.Builder(this);

因为getActivity()不适用于Activity。

主要是替换

  

emailAlert.create();

  

emailAlert.show();

希望你的问题能够得到解决。