ria*_*fai 5 android android-intent firebase firebase-authentication
登录活动:
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");
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
主要活动:
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));
});
}
Run Code Online (Sandbox Code Playgroud)
活动乙:
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
}
Run Code Online (Sandbox Code Playgroud)
好的,正在发生的情况:我成功登录到应用程序,在MainActivity.java它打印用户不为空。但是当我按下按钮时,ActivityB.java正在启动但用户和FirebaseAuth始终为空。
我之前添加了一个authListenerin MainActivity.java,我发现每当我从 MainActivity 启动一个新活动时,监听器都会被触发,它的用户将为空。
那么为什么在我启动 Intent 时会触发侦听器,以及如何从不同的 Activity 访问firebaseAuth和currentUser?
我今天遇到了同样的问题。在解决了你的问题后,我再次检查了我的代码,我发现了我的错误。我在第一个活动结束时使用了 signout()。在我删除后,我的代码工作正常。
我正在使用文档中给出的 authStateListener。在 onCreate 方法中设置侦听器。函数 getCurrentUser() 设置一个后台任务来获取当前用户,因此监听器很重要。
在创建()
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();
}
}
};
Run Code Online (Sandbox Code Playgroud)
在 onStart 或 onResume 方法中,我正在调用 getCurrentUser() 方法
onResume()
mCurrentUser = mAuth.getCurrentUser();
Run Code Online (Sandbox Code Playgroud)
在连接缓慢的情况下
mCurrentUser = user;
Run Code Online (Sandbox Code Playgroud)
在 onCreate() 中会解决这个问题。就我个人而言,我更喜欢在 onStart() 中使用 getcurrentuser 方法,这样如果应用程序在慢速互联网上运行,它就有时间来获取用户。
我希望这能解决你的问题。谢谢你。
| 归档时间: |
|
| 查看次数: |
9200 次 |
| 最近记录: |