将Firebase Persistence设置为true后未检索新数据?

时间:2018-05-03 07:57:19

标签: android firebase firebase-realtime-database

进行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数据持久性以及实时更改

1 个答案:

答案 0 :(得分:2)

如果您正在使用:

setPersistenceEnabled(true);

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

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

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