我正在尝试为Firebase中的多个子节点设置值,但是当我尝试执行此操作时,android studio会将第二个子节点突出显示为错误。有没有不使用哈希图的方法吗?
mDatabaseLike.child("ProjectName").setValue(uploadCurrent.getName()).child("Votes/").setValue(mCountLikes);
我希望将Firebase存储为:
CountLikes:{
ProjectName: "abcd"
Votes: "78"
}
答案 0 :(得分:1)
使用Map的唯一其他选择是使用Java对象,该Java对象的成员具有要添加的值。它会像这样:
class YourObject {
public String ProjectName;
public int Votes;
}
YourObject o = new YourObject();
o.ProjectName = "abcd";
o.Votes = 78;
mDatabaseLike.setValue(o);
答案 1 :(得分:0)
当您想用POJO类中的数据填充节点时,Doug的答案非常好,在这种情况下,使用ProjectName和Votes进行填充,但是正如Frank的评论所说,如果在放置新节点之前在该节点上有旧数据,它将被从该节点覆盖/删除。
例如,如果您在节点上有此
CountLikes:{
ProjectName: "MyAwesomeProject"
Votes: "100"
comments: 20 --> New data that you could add or have
flags: 0 --> New data that you could add or have
favorites: 30 --> New data that you could add or have
}
在执行此操作之前
YourObject o = new YourObject();
o.ProjectName = "abcd";
o.Votes = 78;
mDatabaseLike.setValue(o);
您在该节点上拥有的所有旧数据将被替换为
CountLikes:{
ProjectName: "abcd"
Votes: "78"
}
如果您只需要在该特定节点上更新/更改数据,我建议您使用HashMap
进行操作,因为它只会更新该节点内的值,而不会再次重新创建它们并替换/删除如果您已经在那里有数据。
继续道格的答案
class YourObject {
public String ProjectName;
public int Votes;
}
String projectName = "abcd";
int votes = 78;
Map<String,Object> mapData = new HashMap<>();
mapData.put("ProjectName",projectName);
mapData.put("Votes",votes);
mDatabaseLike.updateChildren(mapData).addOnCompleteListener(new OnCompleteListener<Void>(){
@Override
public void onComplete(@NonNull Task<Void> task){
//Data pushed succefully, update UI or do something else.
}
});
这样做会阻止重新创建整个对象,而不会替换节点中的数据,我知道您在没有HashMap的情况下提出了要求,但是我只是发布了为什么这样做是一个不错的选择。