【问题标题】:Firebase Realtime Database addValueEventListenerFirebase 实时数据库 addValueEventListener
【发布时间】:2016-12-04 11:57:49
【问题描述】:

我已将 setPersistenceEnabled 设置为 true,并且我正在使用 addValueEventListener 并在其中使用 onDataChange 方法。 每次调用该方法时,我的应用程序是否总是从服务器下载数据,或者我的应用程序是否会从缓存中获取数据(如果可用)? 当我离线时,我确信数据来自缓存。

#askFirebase

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    当您使用addValueEventListener() 附加侦听器并且数据在本地磁盘缓存中可用时,onDataChange() 方法将立即使用缓存中的数据触发。

    Firebase 客户端随后将向服务器注册以更新数据。每当它接收到更新的数据时,它都会再次调用onDataChange()

    因此,如果您的本地磁盘缓存中有陈旧数据,您可能会“快速”连续收到两次对onDataChange() 的调用:一次是陈旧数据,第二次是最新数据。目前无法查看数据是否过时。

    唯一真正造成棘手情况的情况是您使用addListenerForSingleValueEvent()。由于您只会在那里获得第一个 onDataChange() 事件,因此您可能只会获得陈旧的数据。这是我们建议不要将磁盘持久性与单值事件侦听器混合使用的原因之一。

    【讨论】:

    • 我使用addListenerForSingleValueEvent() 只检索一次数据。但是,同时我启用了持久性setPersistenceEnabled(true)。所以,这总是会导致单值事件从我的本地缓存中给我带来数据。有没有办法避免这种情况并在启用持久性的同时强制单值事件从远程(Firebase 本身)获取数据?
    • @UgurcanYildirim 不,您无法更改此行为。添加侦听器时,意味着您正在侦听数据库更改。如果您使用addListenerForSingleValueEvent(),这意味着您获得了一次初始数据,然后您还获得了每个新的更改。所以每次更改都会触发onDataChange()。所以没有必要从 Firebase 服务器获取数据,因为没有什么新东西。只有在出现新内容时才从服务器获取数据,对吧?
    猜你喜欢
    • 2020-12-12
    • 1970-01-01
    • 2020-07-05
    • 2021-07-01
    • 1970-01-01
    • 2021-06-26
    • 2017-06-03
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多