在 AuthStateListener Firebase 之外访问用户数据 Android
Access User Data Outside of AuthStateListener Firebase Android
我知道如何在 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");
家class收到这两条数据,是这样处理的。假设所有变量都已在以下代码段中正确初始化:
//This is inside the home class
mUID = getIntent().getExtras().getString("uid");
mName = getIntent().getExtras().getString("name");
很快!我可以访问当前登录用户的 UID 和名称!
您还可以在分配 mName 后在回调中打印 uid。
我知道如何在 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");
家class收到这两条数据,是这样处理的。假设所有变量都已在以下代码段中正确初始化:
//This is inside the home class
mUID = getIntent().getExtras().getString("uid");
mName = getIntent().getExtras().getString("name");
很快!我可以访问当前登录用户的 UID 和名称!
您还可以在分配 mName 后在回调中打印 uid。