这就是我的 firebase
数据库的样子。
我想访问节点 accepting-status
并说 patient23
例如。我可以通过在节点 accepting-status
和 patient23
上分别使用 addListenerForSingleValueEvent
轻松地做到这一点,但是我需要两个不同的请求才能获得所需的数据。我还可以通过在父节点 beacon-final
上添加 addListenerForSingleValueEvent
来通过单个请求获取所需的数据,但那样会检索大量数据,因为患者人数众多。如何我是否在单个请求中执行此操作,但仅检索所需的节点。谢谢。
最佳答案
...but then it would take me two different requests to get the required data.
Firebase 数据库都是一个 JSON 对象。如果您选择一个部分,您将获得下面的所有内容。
但是,Firebase 使用 WebSockets,它是与服务器的持久连接。 This means that you don't have to worry about making a request ,因为唯一的 HTTP 请求是在一开始就建立套接字。
因此,在您的情况下,为数据发出两个单独的“请求”是完全可行的,因为没有真正的开销需要考虑。设备的 radio 已经打开,WebSocket header 只有 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
}
});
关于android - 如何从 firebase 中检索选定的节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410207/