gpt4 book ai didi

android - 使用引用从 firebase 中检索多个日期

转载 作者:行者123 更新时间:2023-12-02 02:55:19 24 4
gpt4 key购买 nike

我有两个类(class) Patient 和 Appointment

The structure of my database

我需要选择特定日期的所有约会,并为每个约会选择使用患者 ID 的患者数据

病人.java

public class Patient {
private String name;
private String phone;
private String patient_id;

public Patient(){

}

public Patient(String name, String phone, String patient_id) {
this.name = name;
this.phone = phone;
this.patient_id = patient_id;
}
}

约会.java
public class Appointment {
@Exclude
public static final int START_HOUR = 8;
@Exclude
public static final int START_MINUTE = 0;
@Exclude
public static final int MAX_NUMBER = 100;
@Exclude
public static final int FIXED_PERIOD = 15;
@Exclude
private Patient patient;
@Exclude
private String date;

private String patient_id;
private String time;
private String color;


public Appointment(){

}

public Appointment(String patient_id, String date, String time, String color) {
this.patient_id = patient_id;
this.date = date;
this.time = time;
this.color = color;
}
}

现在我需要执行检索

我尝试了以下代码,但它失败了,因为 for 循环中的每个任务都在由 firebase 处理的不同线程中运行
 mDatabase.child("appointments").child(date).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
appointmentsList = new ArrayList<>();
//Toast.makeText(getActivity(),String.valueOf(dataSnapshot.getChildrenCount()),Toast.LENGTH_LONG).show();
for(DataSnapshot d:dataSnapshot.getChildren()){
String last_time = "";
if(d.getValue().getClass().equals(String.class)){
last_time = d.getValue().toString();
}else {
final Appointment appointment = d.getValue(Appointment.class);

mDatabase.child("patients").child(appointment.getPatient_id()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot2) {
Patient patient = dataSnapshot2.getValue(Patient.class);
appointment.setPatient(patient);
appointmentsList.add(appointment);
}

@Override
public void onCancelled(DatabaseError databaseError2) {

}
});


}
}
mNoteView.setText(getString(R.string.data_for_date, date));
updatePatientsAdapter();
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

我该如何处理,或者我可以提升数据库结构来解决它吗?

最佳答案

您正在尝试将关系结构应用于 firebase 数据库,这是一个非关系数据库。您将需要 restructure您的数据,以便更有效地执行查询。查看此 article帮助您非规范化您的数据。

您应该保存患者本身,而不是在每次约会中保存患者 ID。

请注意,firebase 有工具可以执行 updates在多个位置的对象中,因为您可以在多个约会中安排同一个病人。

您仍然可以保留患者“表格”,但您需要担心在更新患者时保持数据同步。

关于android - 使用引用从 firebase 中检索多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com