【问题标题】:Firebase retrieve and assign data from parent and children to classFirebase 从父级和子级检索数据并将其分配给类
【发布时间】:2017-11-06 19:11:19
【问题描述】:

我有以下 firebase 类。患者和用户(医生、医院的东西)是多对多的关系。

病人分类

public class Patients {
    public String name;
    public String surname;
    public ArrayList<String> users;
}

这就是我在@987654326 上的firebase 数据库上没有users(表patients 的字段NOT 表)字段遍历数据的方式@表。

database.child("patients").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot patient : dataSnapshot.getChildren()){
            Patients p = patient.getValue(Patients.class);
            //use p object
            listViewAdapter.notifyDataSetChanged();
        }

        patientsList.setAdapter(listViewAdapter);
    }

    @Override
    public void onCancelled(FirebaseError firebaseError) {

    }
});

当然这不适用于patients 表的当前格式,因为users 的子项(表patients 不是 表的字段,需要另一个循环)和我懂吗。我不明白的是,当我必须执行另一个循环时,如何将 Patients 类与 patients 表关联起来。我想不出办法让Patients p = patient.getValue(Patients.class) 与另一个需要迭代的字段一起工作。

我的目标是包含 Patients 类的对象 p 例如 name = Marksurname = Marksusers[] = [y92pZ4rynpUFSOm3MrzQncimu153,...]。我不知道应该如何构建 pojo 以及迭代孩子的正确方法是什么,所以用户 ArrayList 将包含每个患者的所有 users 字段并使用类似 Patients p = patient.getValue(Patients.class)

【问题讨论】:

  • 简单地说,你想在你的输出中有什么?
  • @AlexMamo 要与patients 表关联的Patients 对象。我在patients 表中迭代的最后一部分代码在没有users 字段的情况下工作。
  • Firebase 没有表格。 Firebase 是一个 NoSQL 数据库。你没有理解我的问题。你想打印什么?给我一个包含数据库值的示例。
  • 我不想打印任何东西,如果您指的是列表视图,这与我的问题无关。我想从 firebase 获取值并使用它们。我编辑并删除了我正在使用的列表,因为它与问题无关并且不想专注于那里。
  • 我已经更新了问题。我不知道这是否适合您作为示例我的目标是 Patients 类的对象 p 包含例如 name = Marksurname = Marksusers[] = [y92pZ4rynpUFSOm3MrzQncimu153,...] 我不知道 pojo 应该如何结构化以及迭代孩子的正确方法是什么,以便用户ArrayList 将包含每个患者的所有users 字段。

标签: java android firebase firebase-realtime-database


【解决方案1】:

在没有no argument constructor 和对应的setter 和getter 的情况下拥有带有公共字段的pojo 类是完全错误的!您的所有文件都必须是私有的,并且您只需要通过公共 setter 和 getter 访问它们。请记住,对于 Firebase,无参数构造函数是必需的。这就是您无法映射该节点的原因。将它们添加到您的 pojo 类中,您的问题将得到解决。

【讨论】:

  • 亚历克斯,不是那样的。是的,我将变量更改为私有并添加了 setter 和 getter。但我的问题是 ArrayList。它是什么类型以及如何遍历孩子。 Patients p = patient.getValue(Patients.class) 应该自动分配 Patients pojo 与 firebase 等价物。但是,这会导致 Failed to bounce to type 异常,因为 users 有孩子并且需要另一个循环,并且来自 pojo 的变量 ArrayList 不正确。
  • 您需要了解,如果没有 no argument constructor,Firebase 将根本无法工作。添加公共 setter 和 getter 非常完美。要记住的另一件事是,在 Firebase 中没有表格。 Firebase 数据库由键和值对构成,这意味着数据库中的每个节点都是Map,因此您的 pojo 中根本不需要 ArrayList。例如,您可以查询您的数据库中的名称,并将它们添加到 onDataChange() 方法中的 ArrayList 中,然后为它做您想做的事情。
  • 我明白了。因此,不可能像 namesurname 这样的简单条目那样立即将整个列表分配给 pojo。
  • 有但不常见的做法。流程是这样的:在所需节点上附加一个侦听器 -> 获取所需的名称 -> 将它们添加到 ArrayList -> 使用 ArrayList 做你想做的事情。
  • 即使这不是解决我问题的答案,它也可能为我节省了一些挫败感。谢谢你一直陪着我。
猜你喜欢
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-07
相关资源
最近更新 更多