Android 如何识别最终确定的查询?

Android 如何识别最终确定的查询?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我在firebase引用中执行一个查询(异步)。我需要知道在加载数据后,咨询何时结束,以做出决定。已经研究和思考了很多,我想不出一个解决方案 Firebase refEventTypeFirebase = refUserPrivate.child(EventType.EventTypeEnum.NODE_NAME.text); Query queryEventType = refEventTypeFirebase .orderByKey(); queryEventType.addChildEve

我在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的最大好处之一。通常,更好的做法是围绕数据更改以及您将实时收到这些更改这一事实构建应用程序逻辑。

伙计,谢谢你,这只是我想要的,不完全是,但符合我的目的。实际上,我已经尝试过这个替代方法,但是当我尝试时无法直接转换对象,因为它是这样的:
PojoObject-pojo=snapshot.getValue(PojoObject.class)。事实上,我必须为所有的孩子做一个遮盖物
for(DataSnapshot child:snapshot.getChildren()){//执行在onchildaded}中要执行的操作
。再次感谢你。这让我比其他听众更了解“永不停息”,因为他总是在倾听变化。这东西很傻,但还没修好。