【问题标题】:FireBase getUid Coming Back As Null After Returning a ValueFireBase getUid 在返回值后返回为 Null
【发布时间】:2020-08-19 21:56:53
【问题描述】:

我正在尝试使用用户 ID 创建一个孩子。我在这里创建用户时找到了ID,并在logcat中获取了userID:

     final String fullName = findViewByid(R.id.fullName);
     . 
     .    // Other strings declared here
     .
     public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        FirebaseUser newUserID = mAuth.getCurrentUser();
                        userID = newUserID.getUid();
                        Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
                        

检查了 logcat,看到了 userID 变量。检查auth控制台,得到“authentication complete:true //id:userid”。

这就是问题所在。

     public void onComplete(@NonNull Task<AuthResult> task) {
     .
     .
     .
     });
     Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
     BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
     Log.w(TAG, "idcheck:" + userID);
     **reference.child(userID).setValue(newUser);**

我再次检查了我的 logcat,我得到了“authentication complete:true //id:userid” “idcheck:空”。

我尝试过的事情:

  • 将孩子更改为 uname(另一个字符串变量)。数据已按预期发布到实时数据库中
  • 将“”“”放在用户 ID 周围。不知道我认为它会做什么,但值得一试
  • 将所有字符串和底部代码放在 onComplete 方法中

我之前有它工作过,但不确定如何工作,所以我知道这是可能的。蒂亚!

更新:

我将变量设为全局变量而不是最终变量。它现在按预期工作。

public class(){
String fullName;
public void signUp(){
     public void onComplete(@NonNull Task<AuthResult> task) {
     
     });
     Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
     BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
     Log.w(TAG, "idcheck:" + userID);
     reference.child(userID).setValue(newUser);
   

【问题讨论】:

  • 请编辑问题以完整显示非工作代码,而不是将其分解。

标签: java android firebase firebase-authentication


【解决方案1】:

您似乎正试图在 onComplete 回调之外访问 userID,但这是行不通的。

原因是身份验证是异步进行的,当您的reference.child(userID).setValue(newUser) 运行时,userID = newUserID.getUid() 尚未运行。如果您在调试器中运行代码并在这些行上放置断点,或者向它们添加一些日志记录,您可以很容易地看到这一点。

任何需要 UID 的代码都需要在用户登录完成时调用的 onComplete 内,或者从那里调用。

所以:

 public void onComplete(@NonNull Task<AuthResult> task) {
     if (task.isSuccessful()) {
         FirebaseUser newUserID = mAuth.getCurrentUser();
         userID = newUserID.getUid();

         BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
         reference.child(userID).setValue(newUser);

         ...
});

另见:

【讨论】:

  • 我试过了,但我没有将变量设为全局变量。当我这样做时它起作用了。谢谢!
【解决方案2】:

所以我将变量设为全局变量。轻微的打嗝。编辑在更新后的帖子中。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2020-01-26
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多