我正在使用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次插入,那么如果仅在插入结束时获得回调,那会更好。
答案 0 :(得分:0)
您无法控制。您可以做的是使用MediatorLiveData
并在所有插入操作后输入值。每当您进行更新,删除或插入时,Room都会知道有更改,但不知道更改了什么。因此,它只是重新查询并将结果发送给观察LiveData
选中此blog,主要是 7部分。避免出现可观查询的误报通知。作者提供了一个很好的MediatorLiveData
示例,它与您正在寻找的类似