如何识别最终查询?

时间:2015-10-30 14:03:10

标签: android firebase firebase-realtime-database

我在firebase引用中执行查询(这是异步的)。我需要知道这个咨询何时结束才能在数据加载后做出决定。已经研究过很多想法,我想不出解决方案。

Firebase refEventTypeFirebase = refUserPrivate.child(EventType.EventTypeEnum.NODE_NAME.text);
Query queryEventType = refEventTypeFirebase .orderByKey();
queryEventType.addChildEventListener(new ChildEventListener() {
@Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        // If I have several children in the query, 
        // this method will be called several times until the last "dataSnapshot".
        //How to identify the last time he runs into a given query?
    }
    ...

1 个答案:

答案 0 :(得分:2)

在Firebase中,查询永远不会完成。相反,它会同步数据,包括在连接侦听器之前存在的数据在附加侦听器之后进入的任何新数据。因此,您不必等待查询结果,而是在不再关心数据时监听所有数据(现有数据和新数据)并停止收听。

如果您只关心当前数据,则可以附加单值事件侦听器:

queryEventType.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChanged(DataSnapshot snapshot) {
        for (DataSnapshot child: snapshot.getChildren()) {
            // do the thing that you were going to do in onChildAdded
        }
    }
    ...

但是采用这种方法,你将放弃Firebase的最大好处之一。围绕数据变化这一事实构建应用程序逻辑通常会更好,并且您将实时接收这些更改。