如何识别最终查询?

How to identify a finalized query?

我在 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?
    }
    ...

在 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 的最大优势之一。围绕数据变化这一事实构建您的应用程序逻辑通常更好,并且您将实时接收这些变化。