isSuccessful()和isComplete()方法之间的区别

时间:2018-01-16 06:48:50

标签: android firebase firebase-authentication

我在我的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
            }
  };

但每次我尝试注册时,都会显示消息已成功。然后我会使用&#39; isComplete()&#39;而不是'成功&#39;然后它工作正常。我还检查了Firebase仪表板,以确保注册过程是否正常工作。 现在我想知道这两种方法之间是否有任何重大差异,如果我使用&#39; isComplete()&#39;是否会有任何进一步的问题,因为我已经检查了其他教程,其中是'成功()&#39;已经用过。 还有一件事,对于相同的代码来说,isComplete()&#39;正在返回true并创建用户但是'isSuccessful()&#39; ISN&#39;吨。 完整的代码:

 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");
                }
            }
        }
    });

请帮我解答。谢谢。

3 个答案:

答案 0 :(得分:8)

任务已完成&#34;当任务代表的工作完成时,无论其成功与否。可能有也可能没有错误,你必须检查一下。

任务是'#34;成功&#34;当任务所代表的工作按预期完成时,没有任何错误。

答案 1 :(得分:1)

isComplete()

如果任务完成,则返回true;否则就是假的。

isSuccessful()

如果Task已成功完成,则返回true;否则就是假的。

答案 2 :(得分:0)

从Google Play服务9.0.0版开始,您可以使用 Task API 和许多返回Task的方法,例如fusedLocationProviderClient.lastLocation。 Task是代表异步方法调用的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();
        }
    }
});