如何从firebase中检索选定的节点?

时间:2015-12-22 07:04:15

标签: android firebase

这就是我的firebase数据库的样子。

enter image description here

我想访问节点accepting-status并说patient23例如。我可以通过分别在节点addListenerForSingleValueEventaccepting-status上使用patient23来轻松完成此操作,但之后我会收到两个不同的请求来获取所需的数据。我也可以通过在父节点addListenerForSingleValueEvent上添加beacon-final来通过单个请求获取所需数据,但随后会检索到大量数据,因为患者数量很多。如何在单个请求中执行此操作但只检索所需的节点。感谢。

1 个答案:

答案 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
    }
});