【发布时间】:2018-07-07 21:48:27
【问题描述】:
我正在android中学习Mvvm模式,但我不明白一件事。 Live Data 如何知道房间数据库中的数据何时发生变化?我有这个代码:
片段:
newUserViewModel.getListItemById(itemId).observe(this, new Observer<User>() {
@Override
public void onChanged(@Nullable User user) {
tv.setText(user.getName());
}
});
查看模型:
public LiveData<User> getListItemById(String itemId){
return repository.getListItem(itemId);
}
存储库:
public LiveData<User> getListItem(String itemId){
return userDao.getUSerByID(itemId);
}
道:
@Query("SELECT * FROM User WHERE itemId = :itemId")
LiveData<User> getUSerByID(String itemId);// When this query gets executed and how live Data knows that our Table is changed?
假设我们在数据库中插入了新用户。当我们的数据库中有新数据时,@Query("SELECT * FROM User WHERE itemId = :itemId") 何时执行?)以及 LiveData 如何知道我们在表中有新用户并回调观察者所有者数据已更改?
【问题讨论】:
-
因为在内部,Room 存储了观察者,并在 INSERT 语句之后通过 LiveData 通知他们
-
好的,现在说得通了,非常感谢您的帮助。您可以将此评论作为答案,以便我检查。
-
您能否澄清一下“通过 LiveData 通知他们”的工作流程?那么 INSERT 是如何完成这种情况下 LiveData 通知 Observer 的呢?有一些回调方法?在通知观察者调用之后:newUserViewModel.getListItemById(itemId)
-
顺便说一下,根据文档,您不应该从视图模型中调用 repository.getListItem 。 developer.android.com/topic/libraries/architecture/livedata