簡體   English   中英

FireBase getUid 在返回值后返回為 Null

[英]FireBase getUid Coming Back As Null After Returning a Value

我正在嘗試使用用戶 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 變量。 檢查身份驗證控制台,並得到“身份驗證完成:真//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,我得到了“身份驗證完成:真//id:userid”“idcheck:null”。

我嘗試過的事情:

  • 將孩子更改為 uname(另一個字符串變量)。 數據按預期發布到實時數據庫中
  • 將 "" "" 放在 userID 周圍。 不確定我認為它會做什么,但值得一試
  • 將所有字符串和底部代碼放在 onComplete 方法中

我以前讓它工作但不確定如何工作,所以我知道這是可能的。 TIA!

更新:

我將變量設為全局變量而不是最終變量。 它現在按預期工作。

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

看起來您正在嘗試在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);

         ...
});

另見:

所以我把我的變量設為全局變量。 輕微打嗝。 編輯在更新的帖子中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM