Firebase动态地将项目添加到数组

时间:2017-07-16 17:22:33

标签: android list firebase firebase-realtime-database

我正在尝试使用Firebase for Android进行某种评论。 只有一个问题,有没有办法向阵列添加新项目?

例如,如果我有这样的对象 enter image description here

如果我想推送,它会将其转换为地图 enter image description here

而且我不想每次都覆盖此对象,因为我将拥有多用户支持,并且在某些时候它将失败。

我试图将它作为List来做,不为我的模型创建DataTransferObjects,并支持使用firebase自动解析。

谢谢!如果实际上没有任何想法可以创建地图。

我的ObjectModel:

public class Company implements Parcelable {
    private String id;
    private String name;
    private String description;
    private List<Comment> comments;
}

推送项目的代码:

final DatabaseReference ref = companiesRef.child(companyId).child(NODE_COMMENTS).push();
        return Single.create(e -> ref.setValue(comment)
                .addOnCompleteListener(task -> {
                    e.onSuccess(task.isSuccessful());
                }));

2 个答案:

答案 0 :(得分:0)

这就是它的工作原理,看看我存储的下面的例子&#34; 0&#34;作为我的第一个评论ID和&#34; 1&#34;作为我的第二个评论ID。如您所见,我将lastCommentID存储为列表中最后一条注释的commentID。

{
  "comments": {
    "0": {
      "text": "mycomment",
      "time": "142351516"
    },
    "1": {
      "text": "secondcomment",
      "time": "153426564"
    }
  }

 "lastCommentId": "1"
}

因此,每当您想要向firebase添加新注释时,您必须首先将lastCommentID作为字符串检索并将其转换为整数(例如1),然后将值1添加1(例如2),以便在保存下一个时评论它不会覆盖以前的版本。

请注意,每次向数据库添加注释时都要替换lastCommentID。

{
  "comments": {
    "0": {
      "text": "mycomment",
      "time": "142351516"
    },
    "1": {
      "text": "secondcomment",
      "time": "153426564"
    },
    "2": {
      "text": "thirdcomment",
      "time": "153426564"
    }
  }

 "lastCommentId": "2"
}

答案 1 :(得分:0)

您不需要在Firebase中编写模型类,就可以使用Jackson解析地将JSON解析为Java对象并将其推送到Firebase中。

  

您可以使用Jackson将JSON解析为Java对象

     

。例如,您可以获得:对象,列表,哈希图,整数,字符串,   等等,而没有POJO类。

要了解更多信息,请访问this answer