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) {
...
从我的片段类
?
答
感谢@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);
}
}
曾尝试从片段的'onViewCreated'打电话呢? –
也可能是因为FirebaseAuth对象没有本地实例。 –
还有一个本地实例。这就是为什么从容器活动中获取用户的原因 –