【问题标题】:What triggers LiveData onChanged()?什么触发 LiveData onChanged()?
【发布时间】:2018-11-25 15:35:18
【问题描述】:

我正在使用Room,在Dao我有这个方法:

LiveData<List<Books>> getAllBooks();

在 MainActivity 中,我从 ViewModel 订阅了该方法。数据变化触发onChanged()回调:

    viewModel.getAllBooks()
            .observe(this, books -> {
                Log.d(TAG, "onChanged()");
                booksListAdapter.setData(new ArrayList<>(books));
            });

我想知道什么是更新?当应用程序第一次启动时,我做了 100 次插入,每个插入都会更改数据库,但 onChanged() 没有被调用 100 次。上次我检查它时第一次调用onChanged(),我认为它总是在启动时调用,然后再调用两次。

我可以控制这个吗?例如,如果我知道我将进行 100 次插入,那么如果我只在插入结束时得到回调可能会更好。

【问题讨论】:

    标签: android android-room android-components


    【解决方案1】:

    你无法控制它。您可以做的是使用 MediatorLiveData 并在所有插入后发布值。每当您更新、删除或插入 Room 时,都知道发生了变化,但不知道发生了什么变化。所以它只是重新查询并将结果发送给观察LiveData

    检查这个blog,主要是7部分。避免可观察查询的误报通知。作者给出了很好的MediatorLiveData 示例,与您正在寻找的类似

    【讨论】:

    • 您没有回答实际问题。我也在寻找它的答案。我正在实现自己的 LiveData,我想知道是否应该在 onActiveobserve 中开始网络调用。我只想手动发出网络请求,而不是根据生命周期意识废话,因为当我离开我的活动并返回时,会发出另一个网络请求。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多