【发布时间】:2016-11-30 05:27:31
【问题描述】:
我正在设置离线持久化
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
如in an earlier post 所述,但以下用例失败:
- 在手机上关闭互联网连接
- 尝试写入数据库
- 使用操作系统中用户的多任务菜单从内存中杀死应用程序
- 重新开启互联网连接
- 重新启动应用程序。 此时我希望通过恢复的网络连接将步骤 2 中的新记录发送到数据库,但这不会发生。(我的预期是否正确?)
示例代码:
static{
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
void updateValue(){
DatabaseReference dbRef = FirebaseDatabase.getInstance().getReference("mydb");
dbRef.keepSynced(true);
dbRef.setValue("123");
}
请注意,如果我不从内存中终止应用程序,缓存将起作用:
- 在手机上关闭互联网连接
- 尝试写入数据库
- 重新开启互联网连接
- 一旦网络连接恢复,新记录就会发送到数据库。
【问题讨论】:
-
如果您正在清除数据(缓存),那么它将不起作用。
-
我没有清除应用程序的数据(缓存),只是杀死应用程序。
-
你的第 5 步是否正确,取决于你如何在第 2 步中写入数据。如果是常规的
setValue(),它确实应该已经持久化到磁盘。 -
我无法使用 Firebase 10.0.0 版重现该问题。我执行了您列出的步骤,并观察了重新启动应用程序时添加到数据库中的新记录(使用 Firebase 控制台)。我还启用了调试日志记录,以便更好地了解低级 Firebase 操作
FirebaseDatabase.getInstance().setLogLevel(Logger.Level.DEBUG)。 logcat 消息非常详细。您可能会发现该输出很有帮助。 -
我进行了同样的测试,发现 firebase sync 是重启时的数据。使用 Firebase 数据库 16.0.2
标签: android caching firebase firebase-realtime-database