2017-04-10 37 views
1

這是我想更新數據:如何更新Firebase中的項目?

"users": [ 
    "-KTYWvZG4Qn9ZYTc47O6": { 
     "name": "name" 
     "email": "email" 
    } 
] 

我的代碼:

private void update1(String s, String name,String email) { 

    String key = mFirebaseDatabase.child("users").push().getKey(); 

    user1 user = new users1(name, email); 
    Map<String, Object> postValues = user.toMap(); 

    Map<String, Object> childUpdates = new HashMap<>(); 
    childUpdates.put("https://stackoverflow.com/users/" + key, postValues); 

    mFirebaseDatabase.updateChildren(childUpdates); 
} 

爲什麼會創建一個新的節點?

"users": [ 
    "-KTYWvZG4Qn9ZYTc47O6" : { 
     "name" : "name" 
     "email" : "email" 
    } 
] 
"users": [ 
    "-KeZvOQ8HYrNXvuPBe8z" : { 
     "name" : "name2" 
     "email" : "email2" 
    } 
] 
+1

'mFirebaseDatabase.child( 「用戶」),它

datasnapshot.getkey() 

更新獲得的按鍵()信息getKey();'創建一個新的節點(用一把新鑰匙) - 你還認爲這是什麼? – UnholySheep

+0

這應該有所幫助:http://stackoverflow.com/questions/42559444/firebase-update-is-making-new-one-with-the-same-id-except-last-character/43034019#43034019 –

+0

你是什麼試圖做,在用戶中添加新用戶或更新現有用戶? –

回答

1

您需要使用此代碼 查詢通過電子郵件一樣獨特價值的節點在您的示例 youReference = database.getReference(「masjeds」);

ValueEventListener listener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { 
       masjedKey = dataSnapshot1.getKey(); // This is a member variable 
       masjed = dataSnapshot1.getValue(Masjed.class); // This is a member variable 
     } 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
}; 
masjeds.orderByChild("id").equalTo(masjed.getId()).addValueEventListener(listener); 

然後用使用

youReference.child(masjedKey).child("name").setValue("John") 
0

您可以利用push創建一個新的節點(「創建一個自動生成的子位置的參考」)中的方法:

mFirebaseDatabase.child("users").push().getKey(); 

只是將其刪除,這將更新現有users節點:

mFirebaseDatabase.child("users").getKey(); 
+0

同樣的問題! – Ahmed