Android Firebase数据库-多个ValueEventListeners的快照检索顺序 [英] Firebase Database Android - Snapshot retrieval order from multiple ValueEventListeners

查看:66
本文介绍了Android Firebase数据库-多个ValueEventListeners的快照检索顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在构建一个大量使用Firebase数据库的Android应用.

在数据库中,我有一个名为 RootNode 的节点,其中包含100个子节点. RootNode 的每个子节点都有自己的子节点(每个30到60),每个子节点都有自己的键值属性(因此,我们在每个子节点处谈论的数据量很大).

在客户端,我将 RootNode 的所有子代的密钥存储在List<String> list中.通过遍历此列表,我向 RootNode 的每个子级添加了一个ValueEventListener.

// Loop through the children of RootNode.
for (final String keyOfChildNode: list) { // list contains the keys of all the children nodes of RootNode.
        Log.d(TAG, "Adding ValueEventListener to child node: " + keyOfChildNode);
        // Set a ValueEventListener to child node. 
        RootNodeReference.child(keyOfChildNode).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Datasnapshot of child has been retrieved.
                Log.d(TAG, "Datasnapshot retrieved for child node: " + keyOfChildNode);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                // Report error.
            }
        });
    }

这是控制台输出:

Adding ValueEventListener to child node:    keyChildNode001
Adding ValueEventListener to child node:    keyChildNode002
Adding ValueEventListener to child node:    keyChildNode003
Adding ValueEventListener to child node:    keyChildNode004
Adding ValueEventListener to child node:    keyChildNode005
Adding ValueEventListener to child node:    keyChildNode006
Adding ValueEventListener to child node:    keyChildNode007
Adding ValueEventListener to child node:    keyChildNode008
Adding ValueEventListener to child node:    keyChildNode009
Adding ValueEventListener to child node:    keyChildNode010
Adding ValueEventListener to child node:    keyChildNode011
Adding ValueEventListener to child node:    keyChildNode012
Adding ValueEventListener to child node:    keyChildNode013
Adding ValueEventListener to child node:    keyChildNode014
Adding ValueEventListener to child node:    keyChildNode015
Adding ValueEventListener to child node:    keyChildNode016
Adding ValueEventListener to child node:    keyChildNode017
Adding ValueEventListener to child node:    keyChildNode018
Adding ValueEventListener to child node:    keyChildNode019
Adding ValueEventListener to child node:    keyChildNode020
Adding ValueEventListener to child node:    keyChildNode021
Adding ValueEventListener to child node:    keyChildNode022
Adding ValueEventListener to child node:    keyChildNode023
Adding ValueEventListener to child node:    keyChildNode024
Adding ValueEventListener to child node:    keyChildNode025
Adding ValueEventListener to child node:    keyChildNode026
Adding ValueEventListener to child node:    keyChildNode027
Adding ValueEventListener to child node:    keyChildNode028
Adding ValueEventListener to child node:    keyChildNode029
Adding ValueEventListener to child node:    keyChildNode030
Adding ValueEventListener to child node:    keyChildNode031
Adding ValueEventListener to child node:    keyChildNode032
Adding ValueEventListener to child node:    keyChildNode033
Adding ValueEventListener to child node:    keyChildNode034
Adding ValueEventListener to child node:    keyChildNode035
Adding ValueEventListener to child node:    keyChildNode036
Adding ValueEventListener to child node:    keyChildNode037
Adding ValueEventListener to child node:    keyChildNode038
Adding ValueEventListener to child node:    keyChildNode039
Adding ValueEventListener to child node:    keyChildNode040
Adding ValueEventListener to child node:    keyChildNode041
Adding ValueEventListener to child node:    keyChildNode042
Adding ValueEventListener to child node:    keyChildNode043
Adding ValueEventListener to child node:    keyChildNode044
Adding ValueEventListener to child node:    keyChildNode045
Adding ValueEventListener to child node:    keyChildNode046
Adding ValueEventListener to child node:    keyChildNode047
Adding ValueEventListener to child node:    keyChildNode048
Adding ValueEventListener to child node:    keyChildNode049
Adding ValueEventListener to child node:    keyChildNode050
Adding ValueEventListener to child node:    keyChildNode051
Adding ValueEventListener to child node:    keyChildNode052
Adding ValueEventListener to child node:    keyChildNode053
Adding ValueEventListener to child node:    keyChildNode054
Adding ValueEventListener to child node:    keyChildNode055
Adding ValueEventListener to child node:    keyChildNode056
Adding ValueEventListener to child node:    keyChildNode057
Adding ValueEventListener to child node:    keyChildNode058
Adding ValueEventListener to child node:    keyChildNode059
Adding ValueEventListener to child node:    keyChildNode060
Adding ValueEventListener to child node:    keyChildNode061
Adding ValueEventListener to child node:    keyChildNode062
Adding ValueEventListener to child node:    keyChildNode063
Adding ValueEventListener to child node:    keyChildNode064
Adding ValueEventListener to child node:    keyChildNode065
Adding ValueEventListener to child node:    keyChildNode066
Adding ValueEventListener to child node:    keyChildNode067
Adding ValueEventListener to child node:    keyChildNode068
Adding ValueEventListener to child node:    keyChildNode069
Adding ValueEventListener to child node:    keyChildNode070
Adding ValueEventListener to child node:    keyChildNode071
Adding ValueEventListener to child node:    keyChildNode072
Adding ValueEventListener to child node:    keyChildNode073
Adding ValueEventListener to child node:    keyChildNode074
Adding ValueEventListener to child node:    keyChildNode075
Adding ValueEventListener to child node:    keyChildNode076
Adding ValueEventListener to child node:    keyChildNode077
Adding ValueEventListener to child node:    keyChildNode078
Adding ValueEventListener to child node:    keyChildNode079
Adding ValueEventListener to child node:    keyChildNode080
Adding ValueEventListener to child node:    keyChildNode081
Adding ValueEventListener to child node:    keyChildNode082
Adding ValueEventListener to child node:    keyChildNode083
Adding ValueEventListener to child node:    keyChildNode084
Adding ValueEventListener to child node:    keyChildNode085
Adding ValueEventListener to child node:    keyChildNode086
Adding ValueEventListener to child node:    keyChildNode087
Adding ValueEventListener to child node:    keyChildNode088
Adding ValueEventListener to child node:    keyChildNode089
Adding ValueEventListener to child node:    keyChildNode090
Adding ValueEventListener to child node:    keyChildNode091
Adding ValueEventListener to child node:    keyChildNode092
Adding ValueEventListener to child node:    keyChildNode093
Adding ValueEventListener to child node:    keyChildNode094
Adding ValueEventListener to child node:    keyChildNode095
Adding ValueEventListener to child node:    keyChildNode096
Adding ValueEventListener to child node:    keyChildNode097
Adding ValueEventListener to child node:    keyChildNode098
Adding ValueEventListener to child node:    keyChildNode099
Adding ValueEventListener to child node:    keyChildNode100
Datasnapshot retrieved for child node:  keyChildNode001
Datasnapshot retrieved for child node:  keyChildNode002
Datasnapshot retrieved for child node:  keyChildNode003
Datasnapshot retrieved for child node:  keyChildNode004
Datasnapshot retrieved for child node:  keyChildNode005
Datasnapshot retrieved for child node:  keyChildNode006
Datasnapshot retrieved for child node:  keyChildNode007
Datasnapshot retrieved for child node:  keyChildNode008
Datasnapshot retrieved for child node:  keyChildNode009
Datasnapshot retrieved for child node:  keyChildNode010
Datasnapshot retrieved for child node:  keyChildNode011
Datasnapshot retrieved for child node:  keyChildNode012
Datasnapshot retrieved for child node:  keyChildNode013
Datasnapshot retrieved for child node:  keyChildNode014
Datasnapshot retrieved for child node:  keyChildNode015
Datasnapshot retrieved for child node:  keyChildNode016
Datasnapshot retrieved for child node:  keyChildNode017
Datasnapshot retrieved for child node:  keyChildNode018
Datasnapshot retrieved for child node:  keyChildNode019
Datasnapshot retrieved for child node:  keyChildNode020
Datasnapshot retrieved for child node:  keyChildNode021
Datasnapshot retrieved for child node:  keyChildNode022
Datasnapshot retrieved for child node:  keyChildNode023
Datasnapshot retrieved for child node:  keyChildNode024
Datasnapshot retrieved for child node:  keyChildNode025
Datasnapshot retrieved for child node:  keyChildNode026
Datasnapshot retrieved for child node:  keyChildNode027
Datasnapshot retrieved for child node:  keyChildNode028
Datasnapshot retrieved for child node:  keyChildNode029
Datasnapshot retrieved for child node:  keyChildNode030
Datasnapshot retrieved for child node:  keyChildNode031
Datasnapshot retrieved for child node:  keyChildNode032
Datasnapshot retrieved for child node:  keyChildNode033
Datasnapshot retrieved for child node:  keyChildNode034
Datasnapshot retrieved for child node:  keyChildNode035
Datasnapshot retrieved for child node:  keyChildNode036
Datasnapshot retrieved for child node:  keyChildNode037
Datasnapshot retrieved for child node:  keyChildNode038
Datasnapshot retrieved for child node:  keyChildNode039
Datasnapshot retrieved for child node:  keyChildNode040
Datasnapshot retrieved for child node:  keyChildNode041
Datasnapshot retrieved for child node:  keyChildNode042
Datasnapshot retrieved for child node:  keyChildNode043
Datasnapshot retrieved for child node:  keyChildNode044
Datasnapshot retrieved for child node:  keyChildNode045
Datasnapshot retrieved for child node:  keyChildNode046
Datasnapshot retrieved for child node:  keyChildNode047
Datasnapshot retrieved for child node:  keyChildNode048
Datasnapshot retrieved for child node:  keyChildNode049
Datasnapshot retrieved for child node:  keyChildNode050
Datasnapshot retrieved for child node:  keyChildNode051
Datasnapshot retrieved for child node:  keyChildNode052
Datasnapshot retrieved for child node:  keyChildNode053
Datasnapshot retrieved for child node:  keyChildNode054
Datasnapshot retrieved for child node:  keyChildNode055
Datasnapshot retrieved for child node:  keyChildNode056
Datasnapshot retrieved for child node:  keyChildNode057
Datasnapshot retrieved for child node:  keyChildNode058
Datasnapshot retrieved for child node:  keyChildNode059
Datasnapshot retrieved for child node:  keyChildNode060
Datasnapshot retrieved for child node:  keyChildNode061
Datasnapshot retrieved for child node:  keyChildNode062
Datasnapshot retrieved for child node:  keyChildNode063
Datasnapshot retrieved for child node:  keyChildNode064
Datasnapshot retrieved for child node:  keyChildNode065
Datasnapshot retrieved for child node:  keyChildNode066
Datasnapshot retrieved for child node:  keyChildNode067
Datasnapshot retrieved for child node:  keyChildNode068
Datasnapshot retrieved for child node:  keyChildNode069
Datasnapshot retrieved for child node:  keyChildNode070
Datasnapshot retrieved for child node:  keyChildNode071
Datasnapshot retrieved for child node:  keyChildNode072
Datasnapshot retrieved for child node:  keyChildNode073
Datasnapshot retrieved for child node:  keyChildNode074
Datasnapshot retrieved for child node:  keyChildNode075
Datasnapshot retrieved for child node:  keyChildNode076
Datasnapshot retrieved for child node:  keyChildNode077
Datasnapshot retrieved for child node:  keyChildNode078
Datasnapshot retrieved for child node:  keyChildNode079
Datasnapshot retrieved for child node:  keyChildNode080
Datasnapshot retrieved for child node:  keyChildNode081
Datasnapshot retrieved for child node:  keyChildNode082
Datasnapshot retrieved for child node:  keyChildNode083
Datasnapshot retrieved for child node:  keyChildNode084
Datasnapshot retrieved for child node:  keyChildNode085
Datasnapshot retrieved for child node:  keyChildNode086
Datasnapshot retrieved for child node:  keyChildNode087
Datasnapshot retrieved for child node:  keyChildNode088
Datasnapshot retrieved for child node:  keyChildNode089
Datasnapshot retrieved for child node:  keyChildNode090
Datasnapshot retrieved for child node:  keyChildNode091
Datasnapshot retrieved for child node:  keyChildNode092
Datasnapshot retrieved for child node:  keyChildNode093
Datasnapshot retrieved for child node:  keyChildNode094
Datasnapshot retrieved for child node:  keyChildNode095
Datasnapshot retrieved for child node:  keyChildNode096
Datasnapshot retrieved for child node:  keyChildNode097
Datasnapshot retrieved for child node:  keyChildNode098
Datasnapshot retrieved for child node:  keyChildNode099
Datasnapshot retrieved for child node:  keyChildNode100

让我感到惊讶的是:由于添加到子引用中的ValueEventListeners本质上是异步的,因此我希望快照将以随机顺序进行检索(不一定以与ValueEventListeners相同的顺序进行检索).添加).但是控制台输出显示快照是按照ValueEventListeners添加到每个子节点的顺序检索的.

以有序"方式检索快照是否正常?如果是,鉴于侦听器的异步特性,怎么可能?预先谢谢你.

解决方案

这确实是预期的行为.

Firebase数据库客户端通过单个套接字连接与其服务器进行通信.此套接字用于客户端和数据库服务器之间的所有通信.

当您请求100条记录时,所有请求均以拨打电话的顺序通过此单个连接发送.然后,服务器以相同的顺序执行请求,并以相同的顺序返回结果.

这称为管道传输:通过单个连接发送多个请求并按顺序返回结果.在此之前,我已经回答了有关此问题的更多信息:

And this is the console output:

Adding ValueEventListener to child node:    keyChildNode001
Adding ValueEventListener to child node:    keyChildNode002
Adding ValueEventListener to child node:    keyChildNode003
Adding ValueEventListener to child node:    keyChildNode004
Adding ValueEventListener to child node:    keyChildNode005
Adding ValueEventListener to child node:    keyChildNode006
Adding ValueEventListener to child node:    keyChildNode007
Adding ValueEventListener to child node:    keyChildNode008
Adding ValueEventListener to child node:    keyChildNode009
Adding ValueEventListener to child node:    keyChildNode010
Adding ValueEventListener to child node:    keyChildNode011
Adding ValueEventListener to child node:    keyChildNode012
Adding ValueEventListener to child node:    keyChildNode013
Adding ValueEventListener to child node:    keyChildNode014
Adding ValueEventListener to child node:    keyChildNode015
Adding ValueEventListener to child node:    keyChildNode016
Adding ValueEventListener to child node:    keyChildNode017
Adding ValueEventListener to child node:    keyChildNode018
Adding ValueEventListener to child node:    keyChildNode019
Adding ValueEventListener to child node:    keyChildNode020
Adding ValueEventListener to child node:    keyChildNode021
Adding ValueEventListener to child node:    keyChildNode022
Adding ValueEventListener to child node:    keyChildNode023
Adding ValueEventListener to child node:    keyChildNode024
Adding ValueEventListener to child node:    keyChildNode025
Adding ValueEventListener to child node:    keyChildNode026
Adding ValueEventListener to child node:    keyChildNode027
Adding ValueEventListener to child node:    keyChildNode028
Adding ValueEventListener to child node:    keyChildNode029
Adding ValueEventListener to child node:    keyChildNode030
Adding ValueEventListener to child node:    keyChildNode031
Adding ValueEventListener to child node:    keyChildNode032
Adding ValueEventListener to child node:    keyChildNode033
Adding ValueEventListener to child node:    keyChildNode034
Adding ValueEventListener to child node:    keyChildNode035
Adding ValueEventListener to child node:    keyChildNode036
Adding ValueEventListener to child node:    keyChildNode037
Adding ValueEventListener to child node:    keyChildNode038
Adding ValueEventListener to child node:    keyChildNode039
Adding ValueEventListener to child node:    keyChildNode040
Adding ValueEventListener to child node:    keyChildNode041
Adding ValueEventListener to child node:    keyChildNode042
Adding ValueEventListener to child node:    keyChildNode043
Adding ValueEventListener to child node:    keyChildNode044
Adding ValueEventListener to child node:    keyChildNode045
Adding ValueEventListener to child node:    keyChildNode046
Adding ValueEventListener to child node:    keyChildNode047
Adding ValueEventListener to child node:    keyChildNode048
Adding ValueEventListener to child node:    keyChildNode049
Adding ValueEventListener to child node:    keyChildNode050
Adding ValueEventListener to child node:    keyChildNode051
Adding ValueEventListener to child node:    keyChildNode052
Adding ValueEventListener to child node:    keyChildNode053
Adding ValueEventListener to child node:    keyChildNode054
Adding ValueEventListener to child node:    keyChildNode055
Adding ValueEventListener to child node:    keyChildNode056
Adding ValueEventListener to child node:    keyChildNode057
Adding ValueEventListener to child node:    keyChildNode058
Adding ValueEventListener to child node:    keyChildNode059
Adding ValueEventListener to child node:    keyChildNode060
Adding ValueEventListener to child node:    keyChildNode061
Adding ValueEventListener to child node:    keyChildNode062
Adding ValueEventListener to child node:    keyChildNode063
Adding ValueEventListener to child node:    keyChildNode064
Adding ValueEventListener to child node:    keyChildNode065
Adding ValueEventListener to child node:    keyChildNode066
Adding ValueEventListener to child node:    keyChildNode067
Adding ValueEventListener to child node:    keyChildNode068
Adding ValueEventListener to child node:    keyChildNode069
Adding ValueEventListener to child node:    keyChildNode070
Adding ValueEventListener to child node:    keyChildNode071
Adding ValueEventListener to child node:    keyChildNode072
Adding ValueEventListener to child node:    keyChildNode073
Adding ValueEventListener to child node:    keyChildNode074
Adding ValueEventListener to child node:    keyChildNode075
Adding ValueEventListener to child node:    keyChildNode076
Adding ValueEventListener to child node:    keyChildNode077
Adding ValueEventListener to child node:    keyChildNode078
Adding ValueEventListener to child node:    keyChildNode079
Adding ValueEventListener to child node:    keyChildNode080
Adding ValueEventListener to child node:    keyChildNode081
Adding ValueEventListener to child node:    keyChildNode082
Adding ValueEventListener to child node:    keyChildNode083
Adding ValueEventListener to child node:    keyChildNode084
Adding ValueEventListener to child node:    keyChildNode085
Adding ValueEventListener to child node:    keyChildNode086
Adding ValueEventListener to child node:    keyChildNode087
Adding ValueEventListener to child node:    keyChildNode088
Adding ValueEventListener to child node:    keyChildNode089
Adding ValueEventListener to child node:    keyChildNode090
Adding ValueEventListener to child node:    keyChildNode091
Adding ValueEventListener to child node:    keyChildNode092
Adding ValueEventListener to child node:    keyChildNode093
Adding ValueEventListener to child node:    keyChildNode094
Adding ValueEventListener to child node:    keyChildNode095
Adding ValueEventListener to child node:    keyChildNode096
Adding ValueEventListener to child node:    keyChildNode097
Adding ValueEventListener to child node:    keyChildNode098
Adding ValueEventListener to child node:    keyChildNode099
Adding ValueEventListener to child node:    keyChildNode100
Datasnapshot retrieved for child node:  keyChildNode001
Datasnapshot retrieved for child node:  keyChildNode002
Datasnapshot retrieved for child node:  keyChildNode003
Datasnapshot retrieved for child node:  keyChildNode004
Datasnapshot retrieved for child node:  keyChildNode005
Datasnapshot retrieved for child node:  keyChildNode006
Datasnapshot retrieved for child node:  keyChildNode007
Datasnapshot retrieved for child node:  keyChildNode008
Datasnapshot retrieved for child node:  keyChildNode009
Datasnapshot retrieved for child node:  keyChildNode010
Datasnapshot retrieved for child node:  keyChildNode011
Datasnapshot retrieved for child node:  keyChildNode012
Datasnapshot retrieved for child node:  keyChildNode013
Datasnapshot retrieved for child node:  keyChildNode014
Datasnapshot retrieved for child node:  keyChildNode015
Datasnapshot retrieved for child node:  keyChildNode016
Datasnapshot retrieved for child node:  keyChildNode017
Datasnapshot retrieved for child node:  keyChildNode018
Datasnapshot retrieved for child node:  keyChildNode019
Datasnapshot retrieved for child node:  keyChildNode020
Datasnapshot retrieved for child node:  keyChildNode021
Datasnapshot retrieved for child node:  keyChildNode022
Datasnapshot retrieved for child node:  keyChildNode023
Datasnapshot retrieved for child node:  keyChildNode024
Datasnapshot retrieved for child node:  keyChildNode025
Datasnapshot retrieved for child node:  keyChildNode026
Datasnapshot retrieved for child node:  keyChildNode027
Datasnapshot retrieved for child node:  keyChildNode028
Datasnapshot retrieved for child node:  keyChildNode029
Datasnapshot retrieved for child node:  keyChildNode030
Datasnapshot retrieved for child node:  keyChildNode031
Datasnapshot retrieved for child node:  keyChildNode032
Datasnapshot retrieved for child node:  keyChildNode033
Datasnapshot retrieved for child node:  keyChildNode034
Datasnapshot retrieved for child node:  keyChildNode035
Datasnapshot retrieved for child node:  keyChildNode036
Datasnapshot retrieved for child node:  keyChildNode037
Datasnapshot retrieved for child node:  keyChildNode038
Datasnapshot retrieved for child node:  keyChildNode039
Datasnapshot retrieved for child node:  keyChildNode040
Datasnapshot retrieved for child node:  keyChildNode041
Datasnapshot retrieved for child node:  keyChildNode042
Datasnapshot retrieved for child node:  keyChildNode043
Datasnapshot retrieved for child node:  keyChildNode044
Datasnapshot retrieved for child node:  keyChildNode045
Datasnapshot retrieved for child node:  keyChildNode046
Datasnapshot retrieved for child node:  keyChildNode047
Datasnapshot retrieved for child node:  keyChildNode048
Datasnapshot retrieved for child node:  keyChildNode049
Datasnapshot retrieved for child node:  keyChildNode050
Datasnapshot retrieved for child node:  keyChildNode051
Datasnapshot retrieved for child node:  keyChildNode052
Datasnapshot retrieved for child node:  keyChildNode053
Datasnapshot retrieved for child node:  keyChildNode054
Datasnapshot retrieved for child node:  keyChildNode055
Datasnapshot retrieved for child node:  keyChildNode056
Datasnapshot retrieved for child node:  keyChildNode057
Datasnapshot retrieved for child node:  keyChildNode058
Datasnapshot retrieved for child node:  keyChildNode059
Datasnapshot retrieved for child node:  keyChildNode060
Datasnapshot retrieved for child node:  keyChildNode061
Datasnapshot retrieved for child node:  keyChildNode062
Datasnapshot retrieved for child node:  keyChildNode063
Datasnapshot retrieved for child node:  keyChildNode064
Datasnapshot retrieved for child node:  keyChildNode065
Datasnapshot retrieved for child node:  keyChildNode066
Datasnapshot retrieved for child node:  keyChildNode067
Datasnapshot retrieved for child node:  keyChildNode068
Datasnapshot retrieved for child node:  keyChildNode069
Datasnapshot retrieved for child node:  keyChildNode070
Datasnapshot retrieved for child node:  keyChildNode071
Datasnapshot retrieved for child node:  keyChildNode072
Datasnapshot retrieved for child node:  keyChildNode073
Datasnapshot retrieved for child node:  keyChildNode074
Datasnapshot retrieved for child node:  keyChildNode075
Datasnapshot retrieved for child node:  keyChildNode076
Datasnapshot retrieved for child node:  keyChildNode077
Datasnapshot retrieved for child node:  keyChildNode078
Datasnapshot retrieved for child node:  keyChildNode079
Datasnapshot retrieved for child node:  keyChildNode080
Datasnapshot retrieved for child node:  keyChildNode081
Datasnapshot retrieved for child node:  keyChildNode082
Datasnapshot retrieved for child node:  keyChildNode083
Datasnapshot retrieved for child node:  keyChildNode084
Datasnapshot retrieved for child node:  keyChildNode085
Datasnapshot retrieved for child node:  keyChildNode086
Datasnapshot retrieved for child node:  keyChildNode087
Datasnapshot retrieved for child node:  keyChildNode088
Datasnapshot retrieved for child node:  keyChildNode089
Datasnapshot retrieved for child node:  keyChildNode090
Datasnapshot retrieved for child node:  keyChildNode091
Datasnapshot retrieved for child node:  keyChildNode092
Datasnapshot retrieved for child node:  keyChildNode093
Datasnapshot retrieved for child node:  keyChildNode094
Datasnapshot retrieved for child node:  keyChildNode095
Datasnapshot retrieved for child node:  keyChildNode096
Datasnapshot retrieved for child node:  keyChildNode097
Datasnapshot retrieved for child node:  keyChildNode098
Datasnapshot retrieved for child node:  keyChildNode099
Datasnapshot retrieved for child node:  keyChildNode100

One thing surprised me: since the ValueEventListeners added to the child references are asynchronous in nature, I expected that the snapshots would be retrieved in random order (not necessarily in the same order that the ValueEventListeners were added). But the console output shows that the snapshots are retrieved in the order that the ValueEventListeners were added to each child node.

Is it normal that the snapshots were retrieved in this 'orderly' fashion? If yes, how is it possible given the asynchronous nature of the listeners? Thank you in advance.

解决方案

This is indeed the expected behavior.

The Firebase database client communicates with its server through a single socket connection. This socket is used for all communication between the client and the database server.

When you're requesting the 100 records, the requests are all sent through this single connection in the order in which you make the calls. The server then executes the requests in the same order and returns the results in the same order.

This is known as pipelining: sending multiple requests over a single connection and returning the results in order. I've answered a bit more about it before here: Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly

这篇关于Android Firebase数据库-多个ValueEventListeners的快照检索顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆