在不触发发射的情况下插入 Android Room 表?

Posted

技术标签:

【中文标题】在不触发发射的情况下插入 Android Room 表?【英文标题】:Insert into an Android Room table without triggering an emission? 【发布时间】:2019-01-25 08:51:20 【问题描述】:

有没有办法静默插入/更新您观察到的不会导致发射的 Room 表?我有一张表,其中有一个特定情况我不想收到更改通知,但仍将其保留在同一张表中。我不是指我可以忽略的特定列,因为其他情况我确实想要发射......我正在寻找一种特殊的插入方式,以便我的“getAll()”流动后不会被触发我执行这一特殊情况插入。

我正在考虑的当前解决方案是拥有一个我将“忽略”的列(bool 类型),并在此特殊插入上将其设置为 true。在下一次发射时(应该是瞬时的,我不在乎)...检查该列中的所有布尔值,如果设置了任何布尔值,则删除发射并取消设置标志。不过这样做感觉很奇怪。我宁愿在进来的时候处理它,也不愿在出去的时候处理它。

谢谢。

【问题讨论】:

【参考方案1】:
    LiveData 正在观察 RoomDatabase 的 InvalidationTracker InvalidationTracker 检查表版本以在调用 RoomDatabase.endTransaction 时触发 Observers(LiveData)。

---底线---

A.您可以使用 RoomDatabase.query() 来插入/更新。

B.如果创建两个 RoomDatabase 实例,通过 A 实例的 dao 插入/更新不会触发 B 实例的 InvalidationTracker。

快乐编码

【讨论】:

以上是关于在不触发发射的情况下插入 Android Room 表?的主要内容,如果未能解决你的问题,请参考以下文章

Room 无法验证数据完整性。如何在不编写迁移步骤的情况下修复它?

如何使用 ROOM 库在不阻塞 UI 的情况下将数千条记录从本地数据库加载到 recyclerview

在不使用发射的情况下跟踪父级中的子组件值?

可以在不使用发射器和节点事件的情况下遍历 yaml-cpp 树吗?

有没有办法在不使用PrintManager.print的情况下插入打印作业?

迁移数据库时合并用户的 Android Room 数据库