Dai*_*isy 8 java android firebase firebase-authentication
我正在尝试更改我的代码。但是,它失败了。我的输出还是一样。也就是说,如果用户放置了一个已经存在或不存在的电子邮件。验证“此电子邮件已被注册。” 还是出来了。为什么?有人我的编码有什么问题吗?
这是我的方法:-
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;
}
Run Code Online (Sandbox Code Playgroud)
虽然这半编码,我试图回调方法 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();
}
Run Code Online (Sandbox Code Playgroud)
fetchProvidersForEmail 是一个异步调用,因此您必须在回调中使用其返回值。
在主线程上返回 true 将不起作用。
这是解决方案:
首先用方法创建接口(成功)
public interface OnEmailCheckListener(){
void onSuccess(boolean isRegistered);
}
Run Code Online (Sandbox Code Playgroud)
你的 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);
}
});
}
Run Code Online (Sandbox Code Playgroud)
最后像这样调用你的 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
}
}
});
Run Code Online (Sandbox Code Playgroud)
希望这对你有帮助。
此方法可用于检查电子邮件是否存在
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7879 次 |
| 最近记录: |