【问题标题】:Firebase RealTime Database relationFirebase 实时数据库关系
【发布时间】:2017-10-06 15:58:08
【问题描述】:

我仍在尝试了解这个 NoSQL 数据库及其与 Android 的集成。

我之前有一个SQL数据库,表之间有一些关系,像这样

用户

int id
文字名称
int groupId

组

int id
文字名称

在 Firebase 中我是这样实现的,

{
    "user": {   
        "1": {   
            "name": "Jon",   
            "groups": {   
                "group1": true   
            }   
        }   
    },   
    "groups": {   
       "group1": {   
           "name": "Group 1"   
       }
    }
}

直到这里我认为它很好,但是当我用 Java 编写一些代码时,我不知道如何放置我的 POJO。 这是我到目前为止所做的:

public class Group {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class User {

    private String name;
    private Group groups;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Group getGroups() {
        return groups;
    }

    public void setGroups(Group groups) {
        this.groups = groups;
    }
}

现在读取值。 (在方法 OnCreate 上)

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("user");
myRef.addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Iterable<DataSnapshot> children = dataSnapshot.getChildren();
        DataSnapshot next = children.iterator().next();
        User value =  next.getValue(User.class);
        Group group = value.getGroups();
    }

    @Override
    public void onCancelled(DatabaseError error) {
             // Failed to read value
    }
});

但我组的值始终为空。我究竟做错了什么??如何将用户与组关联起来?

【问题讨论】:

    标签: android firebase firebase-realtime-database nosql


    【解决方案1】:

    我发现的主要问题是您在User 类中的Group 对象: 事实上,如果它保持在当前结构中,它根本不应该是一个自定义对象,而是一个Map。 This 是地图对象 - 一个包含 key 和 value 的集合,就像 Realtime Database 中的孩子一样。

    如果 group 名称 (=key) 旁边没有 true (=value) - 名称可以存储在 String 变量中,但情况并非如此,因为每个Realtime Database 中的 child 必须有一个值,并且在组名旁边存储一个“虚拟”值会使每个组成为 Map 的一部分。这个当前的“虚拟”是boolean,这就是为什么这将是组的数据类型:Map&lt;String, Boolean&gt; groups。

    因此,您的User 类应如下所示:

    public class User {
    
        private String name;
        private Map<String,Boolean> groups;
    

    使用这种精确类型的一个很好的例子是this one。

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2020-09-23
      • 2018-06-22
      • 2020-07-05
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 1970-01-01
      相关资源
      最近更新 更多