目前正在研究在 Android (MVP) 中使用 Firebase Auth。我的流程是这样的:
Activity > Presenter > Interactor > AuthHelper
Activity < Presenter < Interactor < AuthHelper
Auth Helper 类是唯一直接与
FirebaseAuth
实例交互的类。我的问题是关于 AuthStateListener 在这种情况下如何工作:FirebaseAuth.AuthStateListener
AuthStateListener
class MyInteractor implements FirebaseAuth.AuthStateListener {
FirebaseAuth.AuthStateListener listener;
public MyInteractor(){
MyHelper myHelper = new MyHelper(this);
listener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
Log.d("TAG", "onAuthStateChanged called");
}
};
}
public void signOut(){
myHelper.signOut();
}
}
FirebaseAuthInstance
传递给监听器class MyHelper {
private static FirebaseAuth mAuth;
public MyHelper(FirebaseAuth.AuthStateListener listener){
mAuth = FirebaseAuth.getInstance();
listener.onAuthStateChanged(mAuth);
}
public void signOut(){
mAuth.signOut();
}
}
myHelper.signOut()
被称为 预期结果:
交互器中的
onAuthStateChanged()
将触发。收到结果:
onAuthStateChanged()
未触发。相反,我尝试了一种不同的方法,在调用
mAuth
后传递了 signOut()
:public void signOut(){
mAuth.signOut();
listener.onAuthStateChanged(mAuth);
}
这会触发
onAuthStateChanged
。我在这里错过了什么吗? 最佳答案
经过更多的研究,我意识到
FirebaseAuth.getInstance().addAuthStateListener(listener)
是我真正需要用于我的流程而不是
FirebaseAuth.AuthStateListener(mAuth)
的。我误解了它的工作方式,它最终咬了我。引用 this answer 作为主要保护程序。
关于android - FirebaseAuth.AuthStateListener.onAuthStateChanged(mAuth) 未按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45228320/