MainActivity中包含的我的导航抽屉导航到多个Fragment。在这些Fragment类的onCreate方法中,尝试onAuthStateChanged
获取当前用户:
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
可以正常工作。我试过在Fragment的onCreateView()
和onResume()
方法中调用此代码,但没有任何反应。为了解决这个问题并获得当前用户,我在MainActivity中创建了一个方法:
public FirebaseUser getFirebaseUser() {
return user;
}
然后通过执行以下操作在Fragment类中调用该方法:
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
}
在Fragment类中。
记得还要添加:
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
firebaseAuth.removeAuthStateListener(mAuthListener);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句