访问AuthStateListener Firebase Android之外的用户数据

访问AuthStateListener Firebase Android之外的用户数据,android,firebase,firebase-authentication,Android,Firebase,Firebase Authentication,我知道如何在AuthStateListener中访问用户数据,如UID和显示名称,以便在Firebase中进行用户身份验证。我希望能够在AuthStateListener之外访问这些变量。我尝试将此数据分配给AuthStateListener中的变量,然后将其简单地打印到控制台。这是我的代码示例。假设所有变量都已正确声明,并且代码中没有编译时错误: //Inside onCreate mListener = new FirebaseAuth.AuthStateListener() {

我知道如何在AuthStateListener中访问用户数据,如UID和显示名称,以便在Firebase中进行用户身份验证。我希望能够在AuthStateListener之外访问这些变量。我尝试将此数据分配给AuthStateListener中的变量,然后将其简单地打印到控制台。这是我的代码示例。假设所有变量都已正确声明,并且代码中没有编译时错误:

//Inside onCreate
mListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null){
                //mName  has been declared previously outside of the onCreate() method
                mName = user.getUid();
            }
        }
    };

    @Override
    public void onStart(){
        super.onStart();
        mAuth.addAuthStateListener(mListener);
        System.out.println("UID: " + mName);
    }

然而,控制台显示UID:null。如何使其显示用户的实际UID?

我似乎已经解决了自己的问题。我通过启动屏幕获得UID和名称,然后通过intent传递数据

在启动屏幕中:

mListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null){
                Intent toHome = new Intent(splash.this, home.class);
                toHome.putExtra("uid", user.getUid());
                toHome.putExtra("name", user.getDisplayName());
                startActivity(toHome);
            }
            else{
                Intent toLogin = new Intent(splash.this, Login.class);
                startActivity(toLogin);
            }
        }
    };
如果用户存在,那么它将转到主页,否则,用户需要登录(至少在我的情况下)。当然,我在onStart()中添加了这个监听器,并在onStop()方法中删除了它。我使用以下格式将UID和DisplayName添加到意图中:

intent.putExtra("key", "value");
home类接收这两条数据,这就是它处理数据的方式。假设以下代码段中的所有变量都已正确初始化:

//This is inside the home class
mUID = getIntent().getExtras().getString("uid");
mName = getIntent().getExtras().getString("name");

还有普雷斯托!我可以访问当前登录的用户的UID和名称

您还可以在分配mName后在回调中打印uid。

很高兴听到您找到了解决问题的方法。如果你展示你如何做到这一点的代码,它将对其他可能遇到类似问题的人更有用。好吧,这不是我想要的结果。打印部分只是一个测试,看看mName是否被分配了正确的值,而不是null。