我试图在数据库中的下面添加一个新的孩子,但是每次添加一个新孩子时,其他孩子都会被覆盖。
我知道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()即可添加新子代的方法?
答案 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);
从文档中
要同时写入一个节点的特定子节点而不覆盖其他子节点,请使用
updateChildren()
方法。
答案 2 :(得分:1)
只需使用updateChildren()
代替setValue
。这就是您所需要的。最后,您的更新行将如下所示:
mDatabase.updateChildren(readUser).addOnCompleteListener(new OnCompleteListener<Void>() {
//Your code
}
您可以阅读文档here。
我希望这会有所帮助。.编码愉快!