【问题标题】:Firebase getCurrentUser is returning null in new android activityFirebase getCurrentUser 在新的 android 活动中返回 null
【发布时间】:2017-05-22 20:05:19
【问题描述】:

登录活动:

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

活动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 始终为空。

我之前在MainActivity.java 中添加了一个authListener,我发现每当我从 MainActivity 开始一个新活动时,都会触发侦听器并且其用户将为空。

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

【问题讨论】:

  • 你在哪里设置和移除监听器?
  • 在 onStart() 和 onStop() 中就像在文档中一样

标签: android android-intent firebase firebase-authentication


【解决方案1】:

我今天也遇到了同样的问题。在解决了你的问题后,我再次检查了我的代码,我发现了我的错误。我在第一次活动结束时使用了 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 方法,以便在应用程序在慢速互联网上运行时获得一些时间来获取用户。

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

【讨论】:

  • 不可能!!!我来这里是为了将此问题标记为已关闭!我遇到过同样的问题!我在工具栏中有一个按钮,在发出 ActivityB 的按钮旁边,基本上是用于注销,由于某种原因,它在我启动 ActivityB 时触发了它的行为。所以整个问题是正在调用signOut。还是谢谢你!
猜你喜欢
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
相关资源
最近更新 更多