0

我已創建名稱爲Users的節點。我想創建一個名爲Uid的子節點,該節點註冊自己並將其所有配置文件信息存儲在該子節點中。無法將數據添加到Firebase數據庫

只有在用戶已成功註冊到數據庫時纔會發生。所以我用了下面的代碼:

     mAuth.createUserWithEmailAndPassword(user.getEmail(), password) 
           .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
            @Override 
            public void onComplete(@NonNull Task<AuthResult> task) { 
             Log.d("MainActivity", "signIn:onComplete:" + task.isSuccessful()); 

             if (task.isSuccessful()) { 
              DatabaseReference userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
              userDatabaseReference.child(task.getResult().getUser().getUid()) 
                .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { 
               @Override 
               public void onComplete(@NonNull Task<Void> task) { 
                Toast.makeText(ResetPassword.this, "user registred to database", Toast.LENGTH_SHORT).show(); 
                Intent intent = new Intent(ResetPassword.this, MainActivity.class); 
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                startActivity(intent); 
               } 
              }); 

             } else { 
              Toast.makeText(ResetPassword.this, "Registration Failed", 
                Toast.LENGTH_SHORT).show(); 
             } 
            } 
           }); 

但是我的代碼不工作。用戶已成功註冊,但數據庫中未創建任何子項。應該使用用戶的UID的名稱創建。

當我加入斷點如下所示:

我發現,編譯器直接轉移到線LINE無82後106不執行之間的任何行,但仍然它調用被稱爲在MainActivity裏面完成。

我不明白這是怎麼回事。提前致謝。

回答

0

變化 userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo)

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).push().setValue(userInfo) 
+0

這將在uid節點中生成一個帶有推式ID的子代。我不認爲這是OP想要的。 –

+0

然後只需使用.set()而不是.push() –

0

也許FirebaseAuthentication.currentUser尚未初始化。嘗試獲得它從作爲參數傳遞給onComplete方法任務UID:

if (task.isSuccessful()) { 
         userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
         userDatabaseReference.child(task.getResult().getUser().getUid()).setValue(userInfo).addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
          } 
         }); 

        } 
0

更新您完成聽衆的onComplete()看到失敗的原因是什麼:

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo) 
     .addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     if (task.isSuccessful()) { 
      Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
     } else { 
      System.out.println("onComplete: " + task.getException().getMessage()); 
     } 
    } 
}); 

可能有問題,你數據庫安全規則。

0

實際上問題出在與Firebase的連接上。我沒有使用與Firebase相同的帳戶登錄android studio,這就是爲什麼我無法與Firebase進行通信。