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

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

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

谢谢。

【问题讨论】:

    标签: android android-room android-architecture-components android-database


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

    ---底线---

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

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

    快乐编码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-26
      • 2010-11-17
      • 1970-01-01
      • 2013-09-29
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多