0

目前,我从正在执行一些选择逻辑的适配器获取一个数组列表(字符串类型)。

现在,我想将这些值推送到我的 Firebase 数据库,它工作正常,但它像这样推动我

在此处输入图像描述

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

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(),但甚至不发送数据。

4

2 回答 2

1

因此,看起来您有一个Collection名为“myawesomenode”的节点,并且您正在尝试在其中创建一个DocumentidCollectionteamID. 在其中,Document您希望将“UserIds”列表或映射链接到布尔值。

就个人而言,我认为在进行 Firebase 数据库事务时使用 POJO 更容易。例如,您可以创建一个“团队”对象(或任何您想命名的对象),并且在该对象中您可以有一个HashMap<String, Boolean>名为“teamStatus”的变量。然后,您可以通过其teamID值选择的“团队”文档将更改推送到“团队状态”映射,以根据需要修改“用户状态” 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

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

这真的是关于你想如何构建你的 no-sql 数据库。查看有关 Firebase no-sql 的一些文档,它会让您更好地了解如何构建数据以满足您的确切需求。

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

于 2018-11-30T22:16:42.120 回答
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);

}
于 2018-11-30T22:27:51.613 回答