当前,我正在从适配器中获取执行某种选择逻辑的arraylist(字符串类型)。
现在,我想将这些值推送到我的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()
设置数据,但甚至没有发送数据。
答案 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);
}