繁体   English   中英

Firebase查询 - 访问Firebase Android中的嵌套对象

[英]Firebase Query - Accessing nested object in Firebase Android

我有一个看起来像这样的firebase对象

posts: {
  -Kc6CT_CF--kVYApIhD9: {
    -comments: {
       -Kc6CkgQ8-5OztuqHqdS {
         text: "Text here",
         timestamp: 1486179732382,
         user: {
              "username": "user1",
              "email": "some@email.com"
         }
       }
    },
    "lat": "37.8136",
    "lng": "144.9631"
  }
}

我有一个看起来像这样的POJO:

public class Post {

    private Comment comments;
    private double lat;
    private double lng;
    private String text;
    private String timestamp;
    private Motorist user;


    public Post() {  }

    public Comment getComments() {
        return comments;
    }

    public void setComments(Comment comments) {
        this.comments = comments;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    public double getLng() {
        return lng;
    }

    public void setLng(double lng) {
        this.lng = lng;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public String getTimestamp() {
        return timestamp;
    }

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

    public Motorist getUser() {
        return user;
    }

    public void setUser(Motorist user) {
        this.user = user;
    }

    public static class Comment {

        String text;
        String timestamp;
        Motorist user;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }

        public String getTimestamp() {
            return timestamp;
        }

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

        public Motorist getUser() {
            return user;
        }

        public void setUser(Motorist user) {
            this.user = user;
        }
    }
}

这是我在posts对象中循环的代码:

Map<String, Post> td = new HashMap<String, Post>();
    for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){

        Post post = postSnapshot.getValue(Post.class);

        //for (DataSnapshot commentSnapshot : postSnapshot.child("comments").getChildren()) {
        //    System.out.println(commentSnapshot.getValue());
        //}

        td.put(postSnapshot.getKey(), post);
        Toast.makeText(MapsActivity.this, postSnapshot.getValue().toString(), Toast.LENGTH_SHORT).show();
    }

我正在使用addValueEventListener 现在,我的问题是我无法获取comments对象中的数据。 当我运行调试器时,我的comments对象为null 我错过了什么? 或者我的POJO有问题吗?

您的代码和数据结构中存在一些问题:

-comments: {
   -Kc6CkgQ8-5OztuqHqdS {
     text: "Text here",
     timestamp: 1486179732382,
     user: {
          "username": "user1",
          "email": "some@email.com"
     }
   }

如果-确实在comments面前,请将其删除。 该节点应该只被称为comments并且添加-前缀只会使其更难以正确处理。

接下来是你的代码中的一个问题:在(现在) comments你有一个注释列表,用推送ID键入(以-K开头的键。在你的代码中,你只建模了一个注释:

public class Post {
    private Comment comments;

Firebase数据库客户端无法将comments所有子节点映射到该单个Comment ,因此在读取JSON时会跳过它。 JSON结构的正确映射是:

public class Post {
    public Map<String,Comment> comments;

如果您只想处理注释的值,可以使用post.comments.values()获取它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM