如何在Android的firebase数据库中添加具有特定值的特定键?

时间:2017-02-01 13:31:18

标签: android firebase firebase-realtime-database

我有一个简单的简单Firebase数据库,其中我有2个模型。一个ListModel和一个UserModel。在我的列表中,我使用push()方法生成唯一ID。我希望将每个唯一ID添加为关键字,并将其作为Users/gmail@gmail,com/Lists下的值添加为“true”。 当我添加第一个列表时,数据库看起来像这样:

enter image description here

一切正常,但是当我尝试添加另一个时,数据库看起来像这样: enter image description here

Users/gmail@gmail,com/Lists中,第一个被第二个插入覆盖。如何添加特定ID和特定值,作为新项目如下所示?

enter image description here

这是我的代码:

final UserModel um = new UserModel();
um.setUserEmail("gmail@gmail,com");
userDatabaseReference.setValue(um);

ListModel lm = new ListModel();
lm.setListName(listName);
listKeyDatabaseReference = listDatabaseReference.push();
listKey = listKeyDatabaseReference.getKey();
listKeyDatabaseReference.setValue(lm);

listDatabaseReference.child(listKey).child("Users").child("gmail@gmail,com").setValue("true");
userDatabaseReference.child("gmail@gmail,com").child("Lists").child(listKey).setValue("true");

提前致谢!

1 个答案:

答案 0 :(得分:2)

检查official doc

  

对于基本写入操作,您可以使用setValue()将数据保存到指定的引用,替换该路径上的所有现有数据。

你的问题在这里:

userDatabaseReference.setValue(um);

通过这种方式,您将覆盖userDatabaseReference路径中的所有孩子 这意味着当您添加第二条记录时,Users/gmail@gmail,com/Lists中的第一条记录就会被删除。

使用

之前
userDatabaseReference.setValue(um);

如果记录存在,您可以查看 如果不存在,请使用setValue添加用户模型及其所有数据 如果存在,只需跳过此步骤并将数据添加到同一用户内的lists路径中。