登录活动:
private FirebaseAuth firebaseAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
firebaseAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
finish();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
} else {
// User is signed out
Log.d(TAG, "onAuthStateChanged:signed_out");
}
}
};
}
主要活动:
public FirebaseAuth firebaseAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firebaseAuth = FirebaseAuth.getInstance();
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
if (firebaseUser == null) {
//finish();
//startActivity(new Intent(MainActivity.this, LoginActivity.class));
} else {
Log.d(TAG, "THE USER IS NOT NULLL. his email is: " + firebaseUser.getEmail());
}
button.setOnClickListener(new OnClick(){
startActivity(new Intent(ActivityB.class));
});
}
ActivityB:
private FirebaseAuth firebaseAuth;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_friend);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
//Here the user is always null
}
好吧,现在的情况是:
我正在成功登录到应用程序,在
MainActivity.java
中打印用户不为空。但当我按下按钮时,ActivityB.java
将启动,但用户和FirebaseAuth
始终为空。我之前在
authListener
中添加了一个MainActivity.java
,我发现每当我从mainactivity启动一个新活动时,监听器就会被触发,其用户将为空。那么为什么当我开始一个意图时监听器被触发,我如何从不同的活动访问
firebaseAuth
和currentUser
? 最佳答案
我今天也有同样的问题。在检查完你的问题之后,我再次检查了我的代码,发现了我的错误。我在第一个活动的末尾使用了signout()。在我删除代码后,我的代码运行良好。
我正在使用文档中给定的authStateListener。请在onCreate方法中设置侦听器。函数getcurrentuser()设置后台任务以获取当前用户,因此侦听器很重要。
OnCuto()
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
// User is signed in
String UserId = mCurrentUser.getUid();
mCurrentUser = user;
Toast.makeText(ListActivity.this, "USER ID\n"+mUserId,Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(ListActivity.this, "no id got", Toast.LENGTH_SHORT).show();
}
}
};
在onstart或onresume方法中,我调用getcurrentuser()方法
OnReSuMe()
mCurrentUser = mAuth.getCurrentUser();
如果连接缓慢
mCurrentUser = user;
在oncreate()中会处理这个问题。
就我个人而言,我更喜欢在onstart()中使用getcurrentuser方法,这样,如果应用程序运行在速度较慢的Internet上,它就有时间获取用户。
我希望这能解决你的问题。
谢谢您。