如何在给定参数不同时正确地继续任务

时间:2016-10-20 17:58:20

标签: android firebase firebase-authentication

我现在面对tasks,我有疑虑。电子邮件/通行证注册后,我必须更新用户的个人资料。所以我首先尝试了这个:

AuthResult

问题出在最后一行,我的监听器等待updateProfile参数,但Void任务发送final Task<AuthResult> mainTask; mainTask = FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password); mainTask .continueWithTask(new Continuation<AuthResult, Task<Void>>() { @Override public Task<Void> then(@NonNull Task<AuthResult> t) throws Exception { UserProfileChangeRequest profileUpdates = new UserProfileChangeRequest.Builder() .setDisplayName(fullname) .build(); return t.getResult().getUser().updateProfile(profileUpdates); } }) .continueWithTask(new Continuation<Void, Task<AuthResult>>() { @Override public Task<AuthResult> then(@NonNull Task<Void> t) throws Exception { return mainTask; } }) .addOnFailureListener(this, mOnSignInFailureListener) .addOnSuccessListener(this, mOnSignInSuccessListener); 。我像波纹管一样处理这种情况,但看起来太乱了。告诉我是否还有另一种更好的方法:

{{1}}

1 个答案:

答案 0 :(得分:1)

看起来你期望AuthResult直接传递给mOnSignInSuccessListener。在这种特殊情况下,在我看来,尝试强制额外延续以返回您正在寻找的价值是不值得的。

而不是试图将AuthResult作为参数传递给该侦听器,而侦听器可以直接到达mainTask.getResult(),或者可以将AuthResult保存在成员变量中并以这种方式访问​​它。无论哪种方式,它都是安全的,因为mOnSignInSuccessListener只会在mainTask完成后调用,这样可以确保AuthResult准备就绪。