如何解决在 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 举报,一经查实,本站将立刻删除。