FirebaseAuth.AuthStateListener未在片段类中调用

问题描述:

MainActivity中包含的我的导航窗格导航到多个片段。在这些片段类的onCreate方法,我试图onAuthStateChanged来获得当前用户:FirebaseAuth.AuthStateListener未在片段类中调用

FirebaseAuth.AuthStateListener mAuthListener; 
... 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
mAuthListener = new FirebaseAuth.AuthStateListener() { 
     @Override 
     public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
      user = firebaseAuth.getCurrentUser(); 
      if (user != null) { 
       Log.e(TAG, "onAuthStateChanged:signed_in" + user.getUid()); 

      } else { //user is not logged in 

       Log.e(TAG, "onAuthStateChanged:signed_out"); 

      } 

     } 
    }; 
    } 

onAuthStateChanged永远不会被调用。 类似的代码在MainActivity工作得很好。我曾尝试在片段的onCreateView()onResume()方法中调用此代码,但没有任何反应。 为了解决这个问题,并获得当前用户,我创建在MainActivity的方法:

public FirebaseUser getFirebaseUser() { 
    return user; 
} 

,然后做所谓的碎片类中的方法:

FirebaseUser user = ((MainActivity) getActivity()).getFirebaseUser(); 

if (user != null) { 
      Log.e(TAG, "onAuthStateChanged:signed_in" + user.getUid()); 

     } else { //user is not logged in 

      Log.e(TAG, "onAuthStateChanged:signed_out"); 

     } 

,一切工作就好了。 我的问题是,我为什么不能叫

mAuthListener = new FirebaseAuth.AuthStateListener() { 
    @Override 
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
     ... 
从我的片段类

+0

曾尝试从片段的'onViewCreated'打电话呢? –

+0

也可能是因为FirebaseAuth对象没有本地实例。 –

+0

还有一个本地实例。这就是为什么从容器活动中获取用户的原因 –

感谢@ArnisShaykh,我发现我没有打电话:

public void onStart(){ 
    super.onStart(); 
    firebaseAuth.addAuthStateListener(mAuthListener); //firebaseAuth is of class FirebaseAuth 
} 

片段中的类。

记得还补充:

@Override 
public void onStop() { 
    super.onStop(); 
    if (mAuthListener != null) { 
     firebaseAuth.removeAuthStateListener(mAuthListener); 
    } 
}