为多个子节点Firebase

时间:2019-01-27 22:42:23

标签: java firebase firebase-realtime-database

我正在尝试为Firebase中的多个子节点设置值,但是当我尝试执行此操作时,android studio会将第二个子节点突出显示为错误。有没有不使用哈希图的方法吗?

mDatabaseLike.child("ProjectName").setValue(uploadCurrent.getName()).child("Votes/").setValue(mCountLikes);

我希望将Firebase存储为:

CountLikes:{
      ProjectName: "abcd"
      Votes: "78"
}

2 个答案:

答案 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的情况下提出了要求,但是我只是发布了为什么这样做是一个不错的选择。