【问题标题】:Room - LiveData not triggered房间 - 未触发 LiveData
【发布时间】:2017-07-16 16:29:28
【问题描述】:

我正在尝试使用 Room 数据库和 LiveData。 我有 ViewModel,其中包含他们从 dao 获得的 LiveData。 如果我更新Transaction,则可以观察到LiveData<List<Transaction>>,但根本没有观察到LiveData<Transaction>。这怎么可能?我做错了什么?

public abstract class Dao {
    @Query("SELECT * FROM transact WHERE deleted = :value")
    public abstract LiveData<List<Transaction>> allTransactions(boolean value);

    @Query("SELECT * FROM transact WHERE guid = :guid AND deleted = :value ")
    public abstract LiveData<Transaction> getTransaction(String guid, boolean value);

    @Update(onConflict = OnConflictStrategy.REPLACE)
    protected abstract void updateTransaction(Transaction transaction);
}

有类似的问题,当使用非 @Singleton 注释类时提到 Dagger 并发症,不幸的是,这不是我的问题,即使我使用 Dagger。

【问题讨论】:

  • “这怎么可能?” -- 也许 Room 并没有将单个实体更改作为其失效跟踪的一部分。
  • 好吧,我会要求重命名为 DeadData 然后...

标签: java android android-room android-livedata


【解决方案1】:

问题出在AppCompatActivity 内部,它包含ViewModelLiveData

仅对 Fragment 调用 LiveData 观察器,而不为 Activity 调用。 我使用AppCompatActivity 实现了LifecycleOwner 接口,但正确的是实现LifecycleRegistryOwner

致谢:https://issuetracker.google.com/issues/63764057

【讨论】:

  • 你能分享创建视图模型的代码,并添加观察者吗?
【解决方案2】:

在新版本 1.0.0 Alpha 9-1 中,Android 开发者发布说明公布

这是一个主要版本,其中核心生命周期工件(运行时、 common) 和 arch core (common) 达到稳定版本 1.0.0。

随着这一变化,支持库 26.1.0 现在依赖于这些 图书馆。 AppCompatActivity 和 Support Fragment 现在都实现了 LifecycleOwner 接口。

此版本还依赖支持库 26.1.0 来利用 新的集成。

AppCompatActivity 和 Support Fragment 现在都应该在 LifecycleOwner 接口中实现

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多