Android 从Firebase检索父POJO中POJO的Arraylist

Android 从Firebase检索父POJO中POJO的Arraylist,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我一直在努力在我的Android应用程序中从firebase检索数据,我不明白如何检索具有多个子节点的节点 情况是,我在firebase中有一个节点“snaps”,它有一个子节点“likes”。“快照”节点是在用户上载照片时创建的,而“喜欢”节点是在用户喜欢照片时创建的。每次喜欢照片时,都会将“喜欢者”键值对推送到“快照”喜欢节点 目标: 检索快照及其所有子对象都喜欢使用POJO 检索失败的尝试: Firebase ref = new Firebase(Constants.FIR

我一直在努力在我的Android应用程序中从firebase检索数据,我不明白如何检索具有多个子节点的节点

情况是,我在firebase中有一个节点“snaps”,它有一个子节点“likes”。“快照”节点是在用户上载照片时创建的,而“喜欢”节点是在用户喜欢照片时创建的。每次喜欢照片时,都会将“喜欢者”键值对推送到“快照”喜欢节点

目标: 检索快照及其所有子对象都喜欢使用POJO

检索失败的尝试:

        Firebase ref = new Firebase(Constants.FIREBASE_URL+"snaps/");
    Query queryRef = ref.orderByChild("timestamp");

    queryRef.addChildEventListener(new ChildEventListener() {

        @Override
        public void onChildAdded(DataSnapshot snapshot, String previousChild) {

            Snap snap = snapshot.getValue(Snap.class);
            snapsList.add(snap);

        }


    });
数据继承人

第二个快照不包含likes节点,因为它尚未被喜欢

快照的POJO

public class Snap {
private String uid="";
private String uname="";
private String timestamp="";
private String pname="";
private String place="";
private String image="";
private String desc="";
private String likes="";

public Snap() {
}

public Snap(String uid, String uname, String timestamp, String pname, String place, String image, String desc) {
    this.uid = uid;
    this.uname = uname;
    this.timestamp = timestamp;
    this.pname = pname;
    this.place = place;
    this.image = image;
    this.desc = desc;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getUname() {
    return uname;
}

public void setUname(String uname) {
    this.uname = uname;
}

public String getTimestamp() {
    return timestamp;
}

public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
}

public String getPname() {
    return pname;
}

public void setPname(String pname) {
    this.pname = pname;
}

public String getPlace() {
    return place;
}

public void setPlace(String place) {
    this.place = place;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

public String getDesc() {
    return desc;
}

public void setDesc(String desc) {
    this.desc = desc;
}
}
**数据表示-JSON**

{
              "snaps" : {
                "-KDJ0yinIYo-gKpVp13w" : {
                  "desc" : "a",
                  "image" : "...",
                  "likes" : {
                    "-KDJ11Bbbc_d1S2hU2Zk" : {
                      "liked_by" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2"
                    }
                  },
                  "place" : "a",
                  "pname" : "a",
                  "timestamp" : "1458477456134",
                  "uid" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2",
                  "uname" : "Dead Man"
                },
                "-KDJ19tOlJ8-W28k5YAD" : {
                  "desc" : "b",
                  "image" : "...",
                  "place" : "b",
                  "pname" : "b",
                  "timestamp" : "1458477506628",
                  "uid" : "b64ff43c-7b51-40d1-aac8-6e7c700113e2",
                  "uname" : "Dead Man"
                }
              },
              "users" : {
                "b64ff43c-7b51-40d1-aac8-6e7c700113e2" : {
                  "email" : "a@a.com",
                  "full_name" : "Dead Man",
                  "image" : "...",
                  "provider" : "password"
                }
              }
            }

使用所需的结构定义一个Likes类,然后在Snaps类中定义,而不是私有字符串Likes=“”;尝试个人喜好

比如:

public class Snap
    {
      private Likes likes;

      public Likes getLikes ()
        {
            return likes;
        }

        public void setLikes (Likes likes)
        {
            this.likes = likes;
        }
    {

并使用相同的格式为likes的每个子类添加一个类。

使用所需的结构定义likes类,然后在快照类中,而不是私有字符串likes=“”;尝试个人喜好

比如:

public class Snap
    {
      private Likes likes;

      public Likes getLikes ()
        {
            return likes;
        }

        public void setLikes (Likes likes)
        {
            this.likes = likes;
        }
    {

并使用相同的格式为Like的每个孩子添加一个类。

请使用Firebase结构的文本版本而不是图片更新您的问题。您可以使用Firebase仪表板上的“导出”按钮获取文本。在您的问题中包含文本可以进行搜索,也可以避免我们在回答问题时重新键入文本。有两件事:您的快照节点的子节点为/id,而不是/likes节点,因此该结构有多个子节点,结构为:/snaps/id/likes。第二件事是,检索一个节点将始终检索该节点中的所有子节点,因此不清楚您在问什么;是否要检索/快照中的所有节点?还是具体的?您可能可以在这里找到答案,或者至少有助于完善问题。@Jay,我添加了json,是的,我打算检索/snap中的所有节点,但我不知道POJO应该是什么样子。您不能直接这样做。没有一种方法可以为每个/id子节点仅检索/likes节点。但是,您可以检索每个/id节点,然后计算/id节点中的数据。结构总是键:值对,值可以是另一组键:值对。因此,一旦读入/id节点,就可以获取/likes节点的值并对其进行迭代以获得所需的数据。如果您还没有这样做,那么浏览我之前评论中链接中提供的示例将非常有帮助。使用所需的结构定义一个Likes类,然后在Snaps类中,而不是私有字符串Likes=“”;尝试个人喜好;。请使用Firebase结构的文本版本而不是图片更新您的问题。您可以使用Firebase仪表板上的“导出”按钮获取文本。在您的问题中包含文本可以进行搜索,也可以避免我们在回答问题时重新键入文本。有两件事:您的快照节点的子节点为/id,而不是/likes节点,因此该结构有多个子节点,结构为:/snaps/id/likes。第二件事是,检索一个节点将始终检索该节点中的所有子节点,因此不清楚您在问什么;是否要检索/快照中的所有节点?还是具体的?您可能可以在这里找到答案,或者至少有助于完善问题。@Jay,我添加了json,是的,我打算检索/snap中的所有节点,但我不知道POJO应该是什么样子。您不能直接这样做。没有一种方法可以为每个/id子节点仅检索/likes节点。但是,您可以检索每个/id节点,然后计算/id节点中的数据。结构总是键:值对,值可以是另一组键:值对。因此,一旦读入/id节点,就可以获取/likes节点的值并对其进行迭代以获得所需的数据。如果您还没有这样做,那么浏览我之前评论中链接中提供的示例将非常有帮助。使用所需的结构定义一个Likes类,然后在Snaps类中,而不是私有字符串Likes=“”;尝试个人喜好;。