Android 中的 Firebase 数据库持久性错误
Posted
技术标签:
【中文标题】Android 中的 Firebase 数据库持久性错误【英文标题】:Firebase Database Persistence Bug in Android 【发布时间】:2016-10-19 23:47:09 【问题描述】:在过去 2 周里,我一直在彻底使用和测试我的 android 应用。
我在我的应用中详尽地使用 Firebase 实时数据库,最重要的是,我的应用需要无缝离线工作。
我有一个启动屏幕,我在启动和继续时同步特定用户节点的所有数据。
我肯定使用keepSynced(true);
和setPersistenceEnabled(true);
。
注意到一个严重的问题,这导致了很多问题。
场景 1
我是第一次使用互联网连接运行该应用,该应用运行良好。
场景 2
我第一次在没有互联网连接的情况下运行该应用程序,没有任何效果。没有回调被触发。
场景 3
我在有/没有互联网连接的情况下连续运行该应用程序,它工作正常。
场景 4
但是,当我在 没有互联网连接 1 或 2 天后运行该应用程序时,没有任何效果。不会触发回调。
我似乎磁盘持久性被自动清除,这就是为什么数据无法离线使用并且没有触发回调的原因。
那么,如何控制何时清除磁盘持久性?有没有办法确保持久性永远不会被清除?有没有办法配置磁盘持久化的大小?
编辑
这就是我在应用程序类的onCreate()
中所做的。
private void initializeFirebaseDatabase()
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
firebaseDatabase.setPersistenceEnabled(true);
【问题讨论】:
嗨 Artitra,你能解决你的问题吗?我在“com.google.firebase:firebase-database:9.2.0”中看到了类似的问题。由于很难重现这些问题,我不确定更新到最新版本是否可以解决它... 此后我无法重现该问题。 【参考方案1】:查看此链接com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance 我想这个问题与链接中的问题相似并且已解决。
【讨论】:
在创建任何其他实例之前,我正在我的应用程序类中执行此操作。所以这个答案根本没有帮助。 你有一个单独的类来扩展 android.app.Application,带有 FirebaseDatabase.getInstance().setPersistenceEnabled(true);在它的 onCreate 中?如果是,您是否使用 android:name="com.example.MyFirebaseApp" 将该类链接到您的应用程序? 当然可以。而且 Firebase 也不允许在任何数据库初始化后调用 setPersistence() 方法。它会引发异常。 您可以添加屏幕截图或您如何实现 setPersistence() 的代码吗?它可能有助于解决问题 您是否在所有使用 Firebase 引用的 Activity 中调用 initializeFirebaseDatabase 方法?【参考方案2】:我遇到了同样的问题,在那里设置了启动画面 setPersistenceEnabled(true)
,但是当我调用 finish()
并尝试再次打开应用程序时出现错误。
解决了它杀死应用程序而不是调用finish()
。
我使用OnBackPressed()
来完成活动并使用Boolean isFinishing
标志来区分将应用程序发送到后台和终止它。
最后我在OnDestroy()
中杀死它:
android.os.Process.killProcess(android.os.Process.myPid());
【讨论】:
以上是关于Android 中的 Firebase 数据库持久性错误的主要内容,如果未能解决你的问题,请参考以下文章
Android - 持久化从 Firebase 检索到的数据
如何在 Android 上的 Firebase 存储中设置持久性?