0
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) {
...
從我的片段類
?
曾嘗試從片段的'onViewCreated'打電話呢? –
也可能是因爲FirebaseAuth對象沒有本地實例。 –
還有一個本地實例。這就是爲什麼從容器活動中獲取用戶的原因 –