这就是我的firebase
数据库的样子。
我想访问节点accepting-status
并说patient23
例如。我可以通过分别在节点addListenerForSingleValueEvent
和accepting-status
上使用patient23
来轻松完成此操作,但之后我会收到两个不同的请求来获取所需的数据。我也可以通过在父节点addListenerForSingleValueEvent
上添加beacon-final
来通过单个请求获取所需数据,但随后会检索到大量数据,因为患者数量很多。如何在单个请求中执行此操作但只检索所需的节点。感谢。
答案 0 :(得分:3)
...但是接下来需要两个不同的请求才能获得 所需数据。
Firebase数据库是一个JSON对象。如果您选择一个部件,您将获得下面的所有内容。
但是,Firebase使用WebSockets,它是与服务器的持久连接。 This means that you don't have to worry about making a request,因为唯一的HTTP请求是在最开始建立套接字。
因此,在您的情况下,为数据制作两个单独的“请求”是完全可行的,因为没有真正的开销需要考虑。设备的无线电已经打开,WebSocket标头只有6个字节。
您可以在/accepting-status
以及/patients/patient23
轻松创建听众。这是一个标准的Firebase练习,可以拥有多个侦听器。
// Get a root reference
Firebase rootRef = new Firebase("<my-firebase-app>");
// accepting-status ref
Firebase statusRef = rootRef.child("accepting-status");
// patient23 ref
Firebase patientRef = rootRef.child("patients").child("patient23");
// Listen for status updates
statusRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
// error
}
});
// Listen for patient updates
patientRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
// error
}
});