如何读取 Firebase 节点的所有子节点并监控更改



我想读取一个节点的所有子节点,然后跟踪之后发生的任何更改。一个用例可能是本地缓存,我想推迟使用缓存,直到我知道它已填充。

我可以想象的一种方法是首先调用Query.addListenerForSingleValueEvent()来获取初始状态。获得结果后,我知道我的本地缓存已填充,现在可以调用Query.addChildEventListener()以获取有关何时添加和删除子项的更新。

但是,这似乎效率低下 - 现在整个子列表正在通过网络发送两次,我需要添加一个检查以跳过来自我已经从addListenerForSingleValueEvent()获得的addChildEventListener()的条目。

这没什么大不了的,但我想知道是否有更好的方法 - 难道没有一种方法可以简单地调用addChildEventListener()并在发送所有条目时获得信号吗?

要开始同步数据知道初始同步何时完成,您需要添加两个侦听器。

  1. 处理实际更新的ChildEventListener
  2. 用于检测何时发送完整更新的ValueEventListener

对于数据库中的初始数据,将首先为每个子节点调用您的ChildEventListener.onChildAdded。之后,将调用ValueEventListener.onDataChange

因此,一旦调用onDataChange,您就可以知道所有初始数据都已加载。如果您只关心此初始数据是否完整,则可以向addSingleValueEventListener注册此侦听器,以便在初始同步后分离。

请注意,Firebase 只会传输一次数据,即使该数据有多个侦听器也是如此。因此,如果将两个侦听器连接到同一位置,则只会读取一次数据。

最新更新