Java Android检查firebase上是否已经存在电子邮件

Java Android检查firebase上是否已经存在电子邮件,java,android,firebase,firebase-authentication,Java,Android,Firebase,Firebase Authentication,我正在尝试为我的应用创建日志记录活动。所以我用了firebase。但现在我想祝酒,说当我插入一封已经存在的电子邮件,但我发现很难做到这一点。这就是我所做的: public void checkEmailExistsOrNot(){ fAuth.fetchSignInMethodsForEmail(eml).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() { @O

我正在尝试为我的应用创建日志记录活动。所以我用了firebase。但现在我想祝酒,说当我插入一封已经存在的电子邮件,但我发现很难做到这一点。这就是我所做的:

 public void checkEmailExistsOrNot(){

    fAuth.fetchSignInMethodsForEmail(eml).addOnCompleteListener(new OnCompleteListener<SignInMethodQueryResult>() {
        @Override
        public void onComplete(@NonNull Task<SignInMethodQueryResult> task) {
            if (task.getResult().getSignInMethods().size() == 0){
                exist = false;
            }else {
                exist = true;
            }

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            e.printStackTrace();
        }
    });
}
public void checkEmailExistsOrNot(){
fAuth.fetchSigningMethodForemail(eml).addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.getResult().getSignInMethods().size()=0){
存在=错误;
}否则{
存在=真实;
}
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
e、 printStackTrace();
}
});
}
在这里,我检查布尔值是否等于true(因此电子邮件已经存在,我不继续注册),或者如果布尔值等于true,则电子邮件不存在,因此我继续注册:

  checkEmailExistsOrNot();

    if (exist) {
        Toast.makeText(getApplicationContext(), "Email giá registrata", Toast.LENGTH_SHORT);
        return;
    } else {

        fAuth.createUserWithEmailAndPassword(eml, passw).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                progress.setVisibility(View.GONE);

                if (task.isSuccessful()) {
                    Toast.makeText(getApplicationContext(), "registration made", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getApplicationContext(), "registration not performed", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
checkEmailExistsOrNot();
如果(存在){
Toast.makeText(getApplicationContext(),“Email giáregistera”,Toast.LENGTH_SHORT);
返回;
}否则{

fAuth.createUserWithEmailAndPassword(eml,passw).addOnCompleteListener(新的OnCompleteListener

这里的问题是
FetchSigningMethodsForemail
是异步的,但您调用它就像调用synchronouse一样。将您的函数转换为一个将来的/async调用,返回
true
false
。否则,您的代码将继续,而不等待
onComplete
,因此该值始终保持不变s
false

Firebase会自动告诉您是否已经存在您想要创建帐户的电子邮件。 在创建帐户时,您应该检查任务是否成功,是否未完成

if(task.isSuccessful()) {} // you have this code in your last bit of code
else{}                     // you have this in your code already
(

您当前拥有该代码

Toast.makeText(getApplicationContext(), "registration not performed", Toast.LENGTH_SHORT).show();
(这几乎是您提供的代码中的最后一行),但您应该将其替换为:

try {
    throw task.getException();
} catch(FirebaseAuthUserCollisionException e) {
    // email already in use
Toast.makeText(getApplicationContext(), "Email already taken!", Toast.LENGTH_SHORT).show();
}

因此,您不需要自己检查电子邮件是否存在,因为Firebase将自动引发异常,然后您可以显示一个祝酒词。

这是否回答了您的问题?如果您的问题已关闭并标记为“复制”,则您的目标不是再次复制,而是检查原始问题要找到答案,我如何检查异常(参数e)是否包含发生冲突的电子邮件的异常?我的第三行会这样做。如果存在“FireBaseAuthUserCollisonexception”,则会调用第四行和第五行。因此,无需额外检查。只有在存在冲突时才会调用“catch{…}”部分“FirebaseAuthUserCollisionException”。因此,为了回答您的问题,“catch(FirebaseAuthUserCollisionException e){}”只有在e是电子邮件冲突异常时才会被调用。