firebase isSuccessful()和isComplete()方法之间的差异

k10s72fa  于 2022-11-30  发布在  其他
关注(0)|答案(3)|浏览(119)

我在我的android应用程序中使用Firebase。在我的注册方法中,我使用createUserWithEmailAndPassword()方法。为了检查我的注册过程是否成功,我使用isSuccessful()方法。

firebaseAuth.createUserWithEmailAndPassword(m,p).addOnCompleteListener(new 
 OnCompleteListener<AuthResult>() 
 {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
            if(task.isSuccessful())
             {
                //some message               
             }
            else
            {
                 //some other message
            }
  };

但是每次我尝试注册时,消息显示它没有成功。然后我使用isComplete()代替isSuccessful(),然后它工作正常。我还检查了Firebase Jmeter 板,以确保注册过程是否工作正常。现在我想知道这两种方法之间是否有任何主要区别,如果我使用isComplete()是否会有任何进一步的问题,因为我已经查看了其他教程中使用isSuccessful()的地方。还有一件事,对于相同的代码,isComplete()返回true并创建用户,但isSuccessful()没有。完整的代码:

public class RegisterActivity extends AppCompatActivity {
private EditText mail,pass,cPass;
private FirebaseAuth firebaseAuth;
private ImageButton reg;
private TextView warn;
private String a,b,c;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    mail=(EditText) findViewById(R.id.email);
    pass=(EditText) findViewById(R.id.pass);
    cPass=(EditText) findViewById(R.id.Cpass);
    reg=(ImageButton) findViewById(R.id.reg);
    firebaseAuth=FirebaseAuth.getInstance();
    progressDialog=new ProgressDialog(this);
    warn=(TextView) findViewById(R.id.warnTv);
    warn.setText("");
    reg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            a=mail.getText().toString().trim();
            b=pass.getText().toString().trim();
            c=cPass.getText().toString().trim();
            if(a.isEmpty() || b.isEmpty() || c.isEmpty())
            {
                Toast.makeText(getApplicationContext(),"all the fields are mandatory",Toast.LENGTH_SHORT).show();
            }
            else
            {
                if(LoginActivity.validate(a))
                {
                    if(b.equals(c))
                    {
                        progressDialog.setMessage("Wait a sec");
                        progressDialog.show();
                        firebaseAuth.createUserWithEmailAndPassword(a,b).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                if(task.isSuccessful())
                                {
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(),"Registration successful",Toast.LENGTH_SHORT).show();
                                    startActivity(new Intent(RegisterActivity.this,LoginActivity.class));
                                    finish();
                                }
                                else
                                {
                                    progressDialog.dismiss();
                                    Toast.makeText(getApplicationContext(),"Something went wrong",Toast.LENGTH_SHORT).show();
                                }
                            }
                        });
                    }
                    else {
                        
                        warn.setText("Passwords in both the field must be same");
                    }
                }
                else
                {
                    warn.setText("Enter a valid emailId");
                }
            }
        }
    });

请帮我解答,谢谢。

oogrdqng

oogrdqng1#

当Task所代表的工作完成时,Task即为“完成”,不论其成功或失败。可能有错误,也可能没有错误,您必须加以检查。
当任务所代表的工作按预期完成且没有错误时,任务即为“成功”。

axr492tv

axr492tv2#

从Google Play服务版本9.0.0开始,您可以使用一个任务API和许多返回任务的方法,例如fusedLocationProviderClient.lastLocation。任务是一个表示异步方法调用的API,类似于以前版本Google Play服务中的PendingResult。

处理任务结果
若要在工作成功时收到通知,请附加 OnSuccessListener

task.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
    // Task completed successfully
    // ...
}});

若要在工作失败时收到通知,请附加 OnFailureListener

task.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        // Task failed with an exception
        // ...
    }
});

若要在同一侦听器中处理成功和失败,请附加OnCompleteListener:

task.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            // Task completed successfully
            AuthResult result = task.getResult();
        } else {
            // Task failed with an exception
            Exception exception = task.getException();
        }
    }
});
h22fl7wq

h22fl7wq3#

isComplete()
如果任务已完成,则返回true;否则为false。
isSuccessful()
如果任务已成功完成,则返回true;否则为false。

相关问题