如何将true设置为Firebase数据库中的数据列表

时间:2018-11-30 21:34:03

标签: android firebase firebase-realtime-database

当前,我正在从适配器中获取执行某种选择逻辑的arraylist(字符串类型)。

现在,我想将这些值推送到我的Firebase数据库中,效果很好,但是它像这样推送我的

enter image description here

相反,我需要像这样推动它

USERID1 : true;
USERID2 : true;
...

我的代码

mDatabase.child("myawesomenode").child(teamID).setValue(mAdapter.getSelectionList());

我尝试过这种方式制作地图

Map<String,Object> map = new HashMap<>();
map.put(mAdapter.getSelectionList().toString(),true);

并使用updateChildren()设置数据,但甚至没有发送数据。

2 个答案:

答案 0 :(得分:1)

因此,似乎您有一个名为“ myawesomenode”的Collection,并且您正在尝试在Document内创建一个Collection标识的teamID。在该Document中,您希望具有链接到布尔值的“ UserId”的列表或映射。

就我个人而言,我认为在进行Firebase数据库事务时使用POJO更容易。您可以创建一个“ Team”对象(或任何您想命名的对象),例如,在该对象内部可以有一个名为“ teamStatus”的HashMap<String, Boolean>变量。然后,您只需通过其teamID值选择的“ Team”文档将更改推送到“ teamStatus”映射即可根据需要修改“ userStatus” HashMap。不过,您将手动管理整个地图。

class Team {
    public Map<String, Boolean> teamStatus;
}

myawesomenode
  - <thatTeamIDValue>
    - teamStatus
      -<key0>:<value0>
      -<key1>:<value1>

或者,您可以执行以下操作:

class Team {
    public List<MemberStatus> memberStatusList;
    public String someOtherString;
}

class MemberStatus {
    public String id;
    public boolean isRegistered;
    public String name;
    /// other things
}

myawesomenode
  - <thatTeamIDValue>
    - memberStatusList
      - 0
        - id:<idValue>
        - isRegistered:true
        - name:DaName  
      - 1
        - id:<idValue>
        - isRegistered:false
        - name:DaOtherName  
    -someOtherString:SomeOtherValue

...,然后您可以查询该结构。

这实际上与您要如何构建无SQL数据库有关。看看一些有关Firebase no-sql的文档,它将为您提供一个更好的构想,使您可以了解如何构造数据以满足您的确切需求。

编辑:POJO样式还使您可以轻松地发送数据以进行更新,并将JSON字符串响应直接转换为可用形式。

答案 1 :(得分:0)

解决了以下问题

Map<String,Object> map = new HashMap<>();
 for (int i = 0; i < mAdapter.getSelectedDataArray().size(); i++) {
                map.put(mAdapter.getSelectedDataArray().get(i),true);

mDatabase.child("myawesomenode").child(teamID).updateChildren(map);

}