【问题标题】:Android room database is not inserting data in db immediatelyAndroid房间数据库没有立即在数据库中插入数据
【发布时间】:2020-10-30 04:54:58
【问题描述】:

我在我的 android 项目中使用了 room,一切正常,直到有一天我发现 Room 没有立即在 db 中插入数据。

我是如何复制它的

当我运行命令 appdatabase.getUserDao().insert(user) 并在 2 秒后从手机中取出电池并导出数据库后,我发现没有插入数据D b。这是 100% 确定的,因为我的团队已经多次复制了它。它似乎不是直接存储到数据库中而是缓存数据一段时间。

有什么解决方案吗?数据会直接存储在db而不是缓存吗?

【问题讨论】:

  • @zjmo 是正确的,我认为除非您关闭数据库,否则它可能会保留在缓存的数据库中。但是您不必担心,因为无论如何它总是会提供来自 db 的数据。
  • @JeelVankhede ,每次事务期间打开和关闭的数据库非常繁重。我之前也在想它是从 db 提供数据,但是在这个问题之后我发现数据是从缓存中获取的,它不会立即存储在 db 中。因为重新启动设备后它没有获取相同的数据。

标签: android kotlin android-sqlite android-room android-architecture-components


【解决方案1】:

是的,导出前关闭数据库:

RoomDatabase.close()

确保它是

Room.databaseBuilder()

而不是

Room.inMemoryDatabaseBuilder()

检查线程是否正常执行,并且您没有中断 @Transaction 插入

【讨论】:

  • 我无法在现实世界中关闭数据库,因为手机因外部因素而关闭,例如电池分离/电池电量不足/内存不足
  • 一旦插入实体,不管是否缓存,它都在数据库中。充完电后app就可以正常使用db了……重启手机,导出前关闭数据库,数据就在里面了
  • @zono ,这是我们插入数据库时​​的主要问题,电池电量不足然后手机立即关机,重启后当我们从数据库中获取数据时,没有得到值
  • 或者确保你的后台线程在你关闭手机之前执行插入
  • 我不知道。我编辑了相关搜索的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-13
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多