微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Firebase 和 Java 中,如何正确地从数据快照中获取价值?

如何解决在 Firebase 和 Java 中,如何正确地从数据快照中获取价值?

最近我在我的 Android 应用程序中使用 Firebase 并尝试使用 Nosql 数据结构,但我遇到了一些问题。

首先,我的数据结构很简单:

{
  "user": {
     "userid1" :{
          "id: "userid1"
          "name": "Samantha","age": 25
          "email" : "abc@gmail.com"
                }     
          }
}

所以我这样写了我的实体类

public class User implements Serializable {
    private String id;
    private String name;
    private int age;
    private String email;
}

当我想让所有用户进入列表时:

FirebaseDatabase.getInstance().getReference("user").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                    for(DataSnapshot dataSnapshot : snapshot.getChildren()){
                        User user = dataSnapshot.getValue(User.class);
                        listUser.add(user);
                    }
                }
            }

但是如果我想像这样改变我的数据结构,我不知道该怎么做:

{
      user: {
         userid1 :{
              id: "userid1"
              name: "Samantha",age: 25
              email : "abc@gmail.com"
              posts:{
                 postid1: {
                     postid  : "postid1"
                     content : "content1" 
                          }
                 postid2: {
                     postid  : "postid2"
                     content : "content2" 
                          }
                      }
                    }     
              }
    }

我想我必须创建一个 Post 实体类,但是如何像以前一样获取用户列表?任何人都可以向我解释会有所帮助。

解决方法

像您想要的那样嵌套数据是 Firebase 中的一种反模式,与数据结构化文档中的建议背道而驰。见https://firebase.google.com/docs/database/android/structure-data#best_practices_for_data_structure


也就是说:如果你有这样的结构,你可以通过在类中添加 posts 映射来读取它的数据:

public class User implements Serializable {
    public String id;
    public String name;
    public int age;
    public String email;
    public Map<String,Object> posts;
}

如果您想以类型安全的方式获取它们,您可能需要使用 GenericTypeIndicator

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。