【问题标题】:How to retrive this data from firebase?如何从 Firebase 中检索这些数据?
【发布时间】:2021-03-27 14:22:19
【问题描述】:

如何从所有用户 ID 未知的医院中检索所有医院名称。

【问题讨论】:

  • Hospitals 节点中运行一个循环。然后对于每个孩子,从该孩子那里获取医院名称

标签: java android firebase firebase-realtime-database android-recyclerview


【解决方案1】:

有两种主要方法可以导航您在onDataChange 中获得的DataSnapshot

  1. 如果您知道快照中子节点的名称,您可以使用snapshot.child("hospitalData") 从其父节点获取那个子快照。
  2. 如果您不知道快照中子项的名称,可以循环访问snapshot.getChildren() 以访问每个子项快照。

通过组合这些,您可以导航任何结构。

因此,您需要使用getChildren() 遍历用户,然后访问每个用户的child("hospitalData"),并使用child("hospitalName").getValue(String.class) 之类的内容获取每个属性的值。

【讨论】:

  • 我想提取所有的医院名称并将它们显示在 recyclerview 中
  • 我从你的问题中明白了这一点。我的回答解释了如何做到这一点。如果您在实施时遇到困难,我建议您向我们展示您已经尝试过的内容。
  • 我已经使用了这个并获得了 hospitalData 和 Faculty databaseReference.orderByChild("hospitalData").addValueEventListener(new ValueEventListener()。获取的结果与这样的 POJO 类不匹配。如果有的话仅获取医院数据,它会起作用的。
  • for (DataSnapshot ds : snapshot.getChildren()) { System.out.println("Something " + ds.getValue()); } 结果:所有 8 个喜欢 {hospitalData={hospitalEmail=shifa@gmail.com, hospitalNumber=03335992454, hospitalAddress=asdfg hjkl, hospitalName=shifa international},faculty={azim ur rehman1={fees=Rs. 10000000, 教育=文凭, 姓名=azim ur rehman, 专业=升降机, id=1}, saad ahmad siddiqui132={..................}}}
  • 但是当我使用 for (DataSnapshot ds : snapshot.getChildren()) { System.out.println("Something" + ds.getValue(POJO.class));它显示像 pojo 类路径 @614045
【解决方案2】:

这个怎么样。

final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("medicine/Hospitals");
ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        hospitalArrayList.clear();
        for (DataSnapshot item : dataSnapshot.getChildren()) {
            Hospital hospital = item.getValue(Hospital.class);
            hospitalArrayList.add(hospital);
            System.out.println(hospital);
        }
        dataRetrieved();
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        System.out.println("The read failed: " + databaseError.getCode());
    }
});
private void dataRetrieved() {
    adapter.notifyDataSetChanged();
}

Hospital.java 简单示例

public class Hospital {
    public HospitalData hospitalData;

    public Hospital(HospitalData hospitalData) { }

    public Hospital() { }

    public static class HospitalData {
        public String hospitalName;
        public String hospitalAddress;

        public HospitalData(String hospitalName, String hospitalAddress) { }

        public HospitalData() { }

    }

}

你可以像这样在适配器中使用它。

String name = hospitalArrayList.get(position).hospitalData.hospitalName;

【讨论】:

  • 这有帮助。谢谢
【解决方案3】:

你必须修改你的结构。 创建一个新的节点名称医院并将 userId 放入每个医院对象中 即

- medicine
    ..........
 - medicineData
     ..........
 - Patients
   ..........
 - Pharmacies
   ..........
 - hospitals
   ..........

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2017-10-14
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多