Firebase检索父项和子项中的数据并将其分配给类

时间:2017-11-06 19:11:19

标签: java android firebase firebase-realtime-database

我有以下firebase类。患者和使用者(医生,医院的东西)是多对多的关系。 enter image description here

患者类

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

这是我在firebase上迭代数据而不是 users(表patients NOT 表中的字段)字段的方式patients表上的数据库。

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)与另一个需要迭代的字段一起工作的方法。

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

1 个答案:

答案 0 :(得分:1)

将pojo类与公共字段一起使用no argument constructor以及相应的setter和getter是完全错误的!您的所有文件都需要是私有的,您只需通过公共设置者和获取者访问它们。请记住,对于Firebase,无参数构造函数是必需的。这就是你无法映射该节点的原因。将它们添加到您的pojo类中,您的问题就会得到解决。