当前位置: 首页 > 知识库问答 >
问题:

Android中的Firebase数据库持久性缺陷

太叔望
2023-03-14

在过去的两周里,我一直在使用和测试我的Android应用程序。

我在我的应用程序中详尽地使用Firebase实时数据库,最重要的是,我的应用程序需要无缝离线工作。

我有一个启动屏幕,在那里我在启动和继续时同步特定用户节点的所有数据。

I使用保持同步(true) setPersistenceEnabled(真) 当然。

我已经注意到一个严重的问题,这导致了很多问题。

情景1

我第一次使用互联网连接运行该应用程序,该应用程序运行良好。

情景二

我运行的应用程序第一次没有互联网连接,什么工作。没有回调被解雇。

情景3

我运行的应用程序连续与/没有互联网连接,它的工作原理很好。

情景4

但是,当我运行应用程序后1或2天没有互联网连接,没有什么工作。没有回调被解雇。

我觉得磁盘持久性似乎是自动清除的,这就是为什么数据不能脱机使用,并且不会触发回调。

那么,我如何控制何时清除磁盘持久性呢?有没有办法确保持久性永远不会被清除?还有没有办法配置磁盘持久性的大小?

编辑

这就是我在应用程序类的onCreate()中所做的。

private void initializeFirebaseDatabase() {
        if (!FirebaseApp.getApps(this).isEmpty()) {
            FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
            firebaseDatabase.setPersistenceEnabled(true);
        }
}

共有2个答案

张心水
2023-03-14

我也有同样的问题,在那里有一个启动屏幕设置setPersistenceEnabled(true),但是当我调用finish()并试图再次打开应用程序时,出现了错误。解决了这一问题:停止应用程序而不是调用finish()

我使用OnBackPressed()来完成活动,并使用布尔值isFinishing标志来区分将应用程序发送到后台和终止它。

最后,我在OnDestroy()中用以下方法杀死它:

android.os.Process.killProcess(android.os.Process.myPid());
章城
2023-03-14

请查看此链接com.google.firebase.database.数据库异常:调用setPeristextEn的()必须在Firebase数据库实例的任何其他用法之前进行我猜这个问题与链接中的问题相似,并已解决。

 类似资料:
  • 我注意到,如果我发送一些数据到数据库,同时互联网连接被删除,在我重新连接后,数据不会被重新发送。此功能不适用于统一或我错过了什么?这个文档说这应该行得通,但事实并非如此:https://firebase.google.com/docs/database/unity/save-data#write_data_offline

  • 正如标题中所述,我正在使用Firebase实时数据库,并启用了持久性。

  • 问题内容: 从这里的讨论看来,Redux reducer的状态应该保留在数据库中。 用户身份验证在这种情况下如何工作? 是否不会创建新的状态对象来替换数据库中先前创建和编辑的每个用户(及其应用程序状态)的先前状态? 在前端使用所有这些数据并不断更新数据库中的状态是否会表现出色? 编辑: 我创建了一个示例Redux auth项目,该项目也恰好示例了通用Redux,并使用Redux,Socket.io

  • 下面是Kotlin中的类: 但当我试图运行应用程序时,它立即崩溃。以下是崩溃日志: 类似乎不是自动生成的。我检查了从codelab下载的原始java应用程序,发现是自动生成的。

  • Android的Room持久性库优雅地包含了适用于对象或集合的@Insert和@Update注释。但是,我有一个用例(包含模型的推送通知),它需要UPSERT,因为数据库中可能存在数据,也可能不存在数据。 Sqlite本机不具有up,在这个SO问题中描述了解决方法。鉴于那里的解决方案,如何将它们应用于Room? 更具体地说,如何在房间中实现插入或更新,而不破坏任何外键约束?使用insert wit

  • 我试图通过新的android room库更新我的数据库,但它不起作用。这就是我的方法 主要活动。JAVA CarViewModel。JAVA 卡ao.java 我做了调试,新数据出现并调用viewModel。updateItems(list)方法。提前谢谢!