为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Android Studio 在 firebase 中检查“用户电子邮件已经存在”

如何使用 Android Studio 在 firebase 中检查“用户电子邮件已经存在”

不负相思意 2021-06-15 21:23:15
我正在尝试更改我的代码。但是,它失败了。我的输出还是一样。也就是说,如果用户放置了一个已经存在或不存在的电子邮件。验证“此电子邮件已被注册。” 还是出来了。为什么?有人我的编码有什么问题吗?这是我的方法:-public boolean isCheckEmail(final String email){    mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>()    {        @Override        public void onComplete(@NonNull Task<ProviderQueryResult> task)        {            boolean check = !task.getResult().getProviders().isEmpty();            if(check)            {                Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();            }            else            {                Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();            }        }    });    return true;}虽然这半编码,我试图回调方法 isCheckEmail:- private void RegisterAccount(String firstname, String lastname, String email, String password, String confirmpass){    if (TextUtils.isEmpty(email))    {        Toast.makeText(Signup.this, "Enter your email address.", Toast.LENGTH_SHORT).show();    }    else if (!isValidEmail(email)) {        Toast.makeText(Signup.this,"Please enter your valid email address.",Toast.LENGTH_SHORT).show();    }    else if (!isCheckEmail(email))    {        Toast.makeText(Signup.this, "This email has been registered.", Toast.LENGTH_SHORT).show();    }
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

fetchProvidersForEmail 是一个异步调用,因此您必须在回调中使用其返回值。


在主线程上返回 true 将不起作用。


这是解决方案:


首先用方法创建接口(成功)


public interface OnEmailCheckListener(){

 void onSuccess(boolean isRegistered);

你的 checkEmail 方法应该是这样的:


public void isCheckEmail(final String email,final OnEmailCheckListener listener){

mAuth.fetchProvidersForEmail(email).addOnCompleteListener(new OnCompleteListener<ProviderQueryResult>()

{

    @Override

    public void onComplete(@NonNull Task<ProviderQueryResult> task)

    {

        boolean check = !task.getResult().getProviders().isEmpty();

        

        listener.onSuccess(check);

     

    }

});


}

最后像这样调用你的 isCheckEmail :


isCheckEmail("yourEmail@test.com",new OnEmailCheckListener(){

   @Override

   void onSuccess(boolean isRegistered){

    

     if(isRegistered){

           //The email was registered before

    } else {

           //The email not registered before

    }


   }

});

希望这对你有帮助。


查看完整回答
反对 回复 2021-06-30
?
手掌心

TA贡献1942条经验 获得超3个赞

此方法可用于检查电子邮件是否存在


 void checkEmailExistsOrNot(){

    firebaseauth.fetchSignInMethodsForEmail(email.getText().toString()).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {

        @Override

        public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {

            Log.d(TAG,""+task.getResult().getSignInMethods().size());

            if (task.getResult().getSignInMethods().size() == 0){

                // email not existed

            }else {

                // email existed

            }


        }

    }).addOnFailureListener(new OnFailureListener() {

        @Override

        public void onFailure(@NonNull Exception e) {

            e.printStackTrace();

        }

    });

}


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信