onDataChange()检索本地快照而不是实时值

时间:2016-09-12 00:21:38

标签: android firebase firebase-realtime-database

当我开始侦听onDataChange()事件时,处理程序会收到一个值。此值是先前在本地保存的值。然后它立即再次调用处理程序并在云上检索正确的更新值。

文档说:

  

您可以使用该函数读取给定路径中内容的静态快照,因为它们在事件发生时存在。连接侦听器时会触发此方法,每次包括子项在内的数据发生更改时,都会触发此方法。

我读了"因为他们在活动时存在", 不是因为它在事件发生时就存在了。

我希望方法在添加检索实时值时触发一次,而不是在本地保存,然后在每次更改值时触发。

如何重现:

  1. 通过以下方式加载现有对象:

    onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
    
  2. 终止应用并通过Firebase控制台将值更改为" Hello Hello World";

  3. 通过以下方式再次加载对象:

    onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
    
  4. 等待,然后使用值立即再次调用处理程序:" Hello Hello World"

  5. 我不知道这是一个错误还是设计错误。

    如果这是默认行为并且是设计的,有没有办法让我知道该值是否是上次保存的本地值?

1 个答案:

答案 0 :(得分:1)

当您侦听持久高速缓存中存在的值时,Firebase客户端将立即触发具有该本地值的事件。然后它将与服务器同步。如果这导致更新的值,客户端将触发第二个值事件。

目前无法知道事件是来自服务器还是来自本地缓存。最好是设计代码以满足所有情况。