android - FirebaseAuth.AuthStateListener.onAuthStateChanged(mAuth) 未按预期工作

标签 android firebase firebase-authentication

目前正在研究如何在 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/

相关文章:

android - Google Map Android API v2 无法在 Play 商店应用程序中显示 map

firebase - 我如何知道我的逆火集合何时已完成从服务器的加载?

javascript - 列出具有自定义声明的用户的最佳方式

firebase - firebase 在哪里保存它的简单登录用户?

ios - 注册时发生错误处理

android - 刷新gradle时Android Studio 1.3.2错误

android - 无法解析导入 android.support.design.widget.FloatingActionButton[Eclipse]

android - 无法退出 Android 应用程序

android - 在 Firebase 中,如何只向特定的人发送消息

angular - 错误 : Uncaught (in promise): TypeError: Cannot set property 'isAdmin' of null