【问题标题】:How to add a specific key with a specific value in a firebase database with Android?如何使用 Android 在 Firebase 数据库中添加具有特定值的特定键?
【发布时间】:2017-06-18 06:37:55
【问题描述】:

我有一个真实的简单 Firebase 数据库,其中有 2 个模型。一个ListModel 和一个UserModel。在我的列表中,我使用 push() 方法生成唯一 ID。我想添加的每个唯一 ID 作为键和“真”作为它在Users/gmail@gmail,com/Lists 下的值。 当我添加第一个列表时,数据库如下所示:

一切正常,但是当我尝试添加另一个时,数据库如下所示:

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

这是我的代码:

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");

提前致谢!

【问题讨论】:

  • 你能提供更多关于你如何编写和收听数据的代码吗?您发布的单行足以添加条目,因此不足以解释您所看到的行为。
  • 我刚刚编辑了我的帖子并添加了更多代码。谢谢!

标签: android firebase firebase-realtime-database


【解决方案1】:

查看official doc

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

你的问题在这里:

userDatabaseReference.setValue(um);

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

使用前

userDatabaseReference.setValue(um);

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

【讨论】:

  • 感谢您的回答。我现在不明白,但我该如何解决这个问题?
  • 这取决于您的逻辑,但您可以简单地使用 serDatabaseReference.child("gmail@gmail,com").child("Lists").child(listKey).setValue("true");不使用初始 setValue。
  • 如果我不使用初始的setValue,则模型中的所有数据都不会添加到数据库中。你还有别的想法吗?谢谢!
  • @AlexM。哪些数据不会添加?问题中发布的任何内容似乎都依赖于此。
  • @AlexM。在这种情况下,仅当用户不存在时才添加用户(并且您可以使用 setValue)。如果存在,只需在同一用户内的列表路径中添加数据。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多