ojo*_*ifu 1 android firebase firebase-authentication
MainActivity中包含的导航抽屉导航到多个片段.在这些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");
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
但从onAuthStateChanged未被称为.类似的代码MainActivity工作得很好.我试过在片段的方法onCreateView()和调用onResume()方法中调用此代码,但没有任何反应.为了解决这个问题并获得当前用户,我在MainActivity中创建了一个方法:
public FirebaseUser getFirebaseUser() {
return user;
}
Run Code Online (Sandbox Code Playgroud)
然后通过执行以下操作调用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");
}
Run Code Online (Sandbox Code Playgroud)
一切正常.我的问题是,为什么我不能打电话
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
...
Run Code Online (Sandbox Code Playgroud)
从我的片段类?
感谢@ArnisShaykh,我发现我没有打电话:
public void onStart(){
super.onStart();
firebaseAuth.addAuthStateListener(mAuthListener); //firebaseAuth is of class FirebaseAuth
}
Run Code Online (Sandbox Code Playgroud)
在Fragment类中.
记得还要加:
@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
firebaseAuth.removeAuthStateListener(mAuthListener);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2204 次 |
| 最近记录: |