在不触发发射的情况下插入 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 树吗?