【问题标题】:Not retrieving new data after setting Firebase Persistence Enabled to true?将 Firebase Persistence Enabled 设置为 true 后未检索新数据?
【发布时间】:2018-05-03 07:57:18
【问题描述】:

制作FirebaseDatabase.getInstance().setPersistenceEnabled(true);后查询获取数据时

Query  query = FirebaseDatabase.getInstance()
                      .getReference()
                      .child("notifications")
                      .child("entities")
                      .child(FirebaseAuth.getInstance().getCurrentUser().getUid().toString())
                      .orderByChild("seen")
                      .equalTo(0); 

来自data tree

它提供缓存中的旧数据,而不是 Firebase 数据库中新更改的数据。但是当我将 setPersistenceEnabled(true) 更改为 setPersistenceEnabled(false) 时,一切都很好 虽然我也希望 Firebase 数据是保存在缓存中并在对 Firebase 数据库进行更改时进行更改。请帮助维护 Firebase 数据持久性以及实时更改

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    如果您正在使用:

    setPersistenceEnabled(true);
    

    这意味着即使您处于离线状态,您也可以查询您的数据库。发生这种情况是因为 Firebase 创建了您的数据库的本地副本,该副本将在您的应用/设备重新启动后持续存在。在您离线时所做的每项更改都会在您重新上线后在 Firebase 服务器上更新。更清楚地说,每个使用 Firebase 数据库并使用 setPersistenceEnabled(true) 的客户端都维护自己的内部(本地)版本的数据库。当数据更新时,它首先被写入到这个本地版本的数据库中。

    因此,通过启用持久性,Firebase 实时数据库客户端将在联机时同步的任何数据都将持久保存到磁盘并且可以脱机使用,即使用户或操作系统重新启动应用程序也是如此。这意味着您的应用将使用存储在缓存中的本地数据像在线一样运行。

    但是,当您未连接到服务器时,无法停止从缓存中检索数据,因为您无法在连接到服务器时强制从缓存中检索数据,不幸的是此行为无法更改。

    【讨论】:

    • 先生!我已经为后端服务编写了代码,该服务通过一些线程睡眠时间继续监视所见属性上的节点状态,即使我重新启动它(持久性为真)也没有得到它应该以同步方式获得的东西。
    • 没错。如果您setPersistenceEnabled(true); 并且您处于离线状态,则在重新启动应用程序时,您将从缓存中获取数据。如果你想从服务器获取数据,你只需要上网,就可以了。你现在明白了吗?
    • 非常感谢您的概念指南。
    • 先生!正如我在遇到应用程序在线时没有获取新数据副本的问题后提出的那样,因为我有一个持续运行以监视节点状态的服务。您的回答仅表明有关 firebase 的“不幸现象”。
    • 是的,您的回答很有帮助,因为它告诉我,当设备联机时,我必须重新启动服务(在您的回答第一段的第二行中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多