2017-04-01 21 views
0

我正試圖檢索當我註冊並在我的android應用程序中創建新用戶時正在生成的推鍵。但被檢索的關鍵與創建的關鍵不一樣。這是可能的嗎?這是我的代碼。我該如何糾正它? 。在firebase中生成的推鍵不等於正在檢索android

firebaseAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 

         //checking if success 
         if(task.isSuccessful()){ 

           id = firebaseAuth.getCurrentUser().getUid(); 
          key = databaseReference1.child(sexs).push().getKey(); 
          Log.d("User key", key); 
          User user = new User(username, halls, levels, downloadUrl, id, key); 




          databaseReference1.child(sexs).push().setValue(user); 

回答

1

你似乎混淆了火力地堡數據庫發送的ID(火力地堡認證用戶ID(通常稱爲UID)當你在一個DatabaseReference調用push()產生他們是非常不同的東西 - 幾乎他們擁有的唯一的東西共同點是,他們認同的東西,因此被製作成獨特的

如果我正確地理解你的代碼,你要存儲新創建的用戶在火力地堡數據庫信息的代碼是:。

databaseReference.child(id).setValue(user); 

更新

每當您撥打push()時,它將生成一個新的唯一ID的位置。由於代碼調用push()兩次(一次提取密鑰的位置以及一次將值設置到數據庫的位置),那麼這些位置將是兩個不同的位置。

要獲得該位置的關鍵,一定要打電話push()只有一次:

id = firebaseAuth.getCurrentUser().getUid(); 
User user = new User(username, halls, levels, downloadUrl, id, key); 

DatabaseReference newRef = databaseReference1.child(sexs).push(); 
key = newRef.getKey(); 
Log.d("User key", key); 
newRef.setValue(user); 
+0

請不要!我非常瞭解這種差異。我想檢索我在「databaseReference1.child(sexs).push()。setValue(user);」中調用push()後生成的推送ID。這段代碼應該是這樣做的「key = databaseReference1.child(sexs).push()。getKey();」但我得到的價值是不同的。我不明白爲什麼@FrankvanPuffelen –

+0

我添加了一個解釋。 –

0

你得到一個不同的密鑰,因爲你再打電話push()

databaseReference1.child(sexs).push().setValue(user); 

相反,你應該做的如下:

databaseReference1.child(sexs).child(key).setValue(user); 

這將存儲用戶根據您生成並存儲在「密鑰」變量中的密鑰

相關問題