如何更改列表数据结构Firebase数据库Android的值?

时间:2018-07-11 11:34:52

标签: android firebase firebase-realtime-database

enter image description here

我想根据附件中显示的 memberId readStatus 值从1更改为2。我无法更改是直接使用单个查询。如何更改?

我尝试过

 HashMap<String, Object> result = new HashMap<>();
    result.put("readStatus", "2");

    FirebaseDatabase.getInstance().getReference()
            .child("Message")
            .child(idRoom)
            .child("ChatMessages")
            .child(messageId)
            .child("Status")
            .child("memberID")
            .updateChildren(result);

但是它添加了一个新的孩子作为memberId-由于上述查询,我​​得到的是不正确的。如何实现此查询?

1 个答案:

答案 0 :(得分:0)

对此进行更改,您正在尝试将值更新为没有您的readStatus键的引用

 FirebaseDatabase.getInstance().getReference()
            .child("Message")
            .child(idRoom)
            .child("ChatMessages")
            .child(messageId)
            .child("status")
            .child("0")
            .updateChildren(result);

如果希望每个成员都有一个readStatus,则应将数据库更改为此

status
|_ "your_member_id"
       |_ readStatus: 1

代替

status
|_ 0
   |_ memberId: "your_member_id"
   |_ readStatus: 2

另外,您的参考中还有一些错别字,例如.child("memberID")在您的数据库中不存在,而.child("Status")是大写字母,而小写字母"status"

如果您如上所述更改数据库结构,则应以这种方式更新值

 HashMap<String, Object> result = new HashMap<>();
    result.put("readStatus", "2");

    FirebaseDatabase.getInstance().getReference()
            .child("Message")
            .child(idRoom)
            .child("ChatMessages")
            .child(messageId)
            .child("status")
            .child(memberId)
            .updateChildren(result);

此外,也无需使用地图来更新子级,只需使用setValue();,它将覆盖当前的resultStatus

  FirebaseDatabase.getInstance().getReference()
                .child("Message")
                .child(idRoom)
                .child("ChatMessages")
                .child(messageId)
                .child("status")
                .child(memberId)
                .child("readStatus")
                .setValue("2");