0

我正在使用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 次插入,那么如果我只在插入结束时得到回调可能会更好。

4

1 回答 1

0

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

查看此博客,主要是第7 节。避免可观察查询的误报通知。作者给出了很好的例子,MediatorLiveData它与你正在寻找的相似

于 2018-11-26T04:04:59.553 回答