如何添加新的孩子而不覆盖其他孩子

时间:2019-05-21 08:48:39

标签: java android firebase firebase-realtime-database

我试图在数据库中的下面添加一个新的孩子,但是每次添加一个新孩子时,其他孩子都会被覆盖。

enter image description here

我知道setValue()将覆盖子级。我不想使用Push(),因为这会创建另一个我不需要的id,因为我希望用户能够进入数据库并手动添加新的userID:true。

mDatabase = FirebaseDatabase.getInstance().getReference("readUsers")

HashMap<String, String> readUser = new HashMap<>();
                            readUser.put(userId, "true");


mDatabase.setValue(readUser).addOnCompleteListener(new OnCompleteListener<Void>() {

是否有另一种无需使用push()即可添加新子代的方法?

3 个答案:

答案 0 :(得分:1)

要解决此问题,请更改以下代码行:

mDatabase.setValue(readUser).addOnCompleteListener(new OnCompleteListener<Void>() {}

mDatabase.updateChildren(readUser).addOnCompleteListener(new OnCompleteListener<Void>() {}

请参见,我使用了DatabaseReference的updateChildren(),而不是使用setValue()方法:

  

将特定的子键更新为指定的值。

答案 1 :(得分:1)

您可以使用updateChildren()

mDatabase = FirebaseDatabase.getInstance().getReference("readUsers")
Map<String, Object> updates = new HashMap<String,Object>();
updates.put(userId, "true");
mDatabase.updateChildren(updates);

从文档中

  

Update specific fields

     

要同时写入一个节点的特定子节点而不覆盖其他子节点,请使用updateChildren()方法。

答案 2 :(得分:1)

只需使用updateChildren()代替setValue。这就是您所需要的。最后,您的更新行将如下所示:

mDatabase.updateChildren(readUser).addOnCompleteListener(new OnCompleteListener<Void>() {
    //Your code
}

您可以阅读文档here

我希望这会有所帮助。.编码愉快!