gpt4 book ai didi

android - Firebase getCurrentUser 在新的 Android Activity 中返回 null

转载 作者:行者123 更新时间:2023-12-01 17:37:16 29 4
gpt4 key购买 nike

登录 Activity :

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");
}
}
};
}

主要 Activity :

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));
});
}

Activity B:

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 始终为 null。

我之前在 MainActivity.java 中添加了一个 authListener,我发现每当我从 MainActivity 启动一个新 Activity 时,都会触发监听器,并且其用户将为 null .

那么为什么当我启动 Intent 时会触发监听器,以及如何从不同的 Activity 访问 firebaseAuthcurrentUser

最佳答案

我今天也遇到了同样的问题。在解决你的问题后,我再次检查了我的代码,发现了我的错误。我在第一个 Activity 结束时使用了signout()。删除后,我的代码工作正常。

我正在使用文档中给出的 authStateListener。在 onCreate 方法中设置监听器。函数 getCurrentUser() 设置一个后台任务来获取当前用户,因此监听器很重要。

onCreate()

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 方法,这样如果应用程序在慢速互联网上运行,它就有一些时间来获取用户。

我希望这能解决您的问题。谢谢。

关于android - Firebase getCurrentUser 在新的 Android Activity 中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61016572/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com