目前正在研究如何在 Android (MVP) 中使用 Firebase Auth。我的流程是这样的:
Activity > Presenter > Interactor > AuthHelper
Activity < Presenter < Interactor < AuthHelper
Auth Helper 类是唯一与 FirebaseAuth
实例直接交互的类。我的问题是关于 AuthStateListener 在这种情况下的工作方式:
- Interactor 有
FirebaseAuth.AuthStateListener
Interactor 初始化 Auth Helper 类,传递
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(); } }
Helper 将
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()
没有被触发。
我尝试了一种不同的方法,我在调用 signOut()
之后传递了 mAuth
:
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/