我在android中学习Mvvm模式,我不明白一件事.实时数据如何知道房间数据库中数据何时发生变化?我有这个代码:
分段:
newUserViewModel.getListItemById(itemId).observe(this, new Observer<User>() {
@Override
public void onChanged(@Nullable User user) {
tv.setText(user.getName());
}
});
Run Code Online (Sandbox Code Playgroud)
查看型号:
public LiveData<User> getListItemById(String itemId){
return repository.getListItem(itemId);
}
Run Code Online (Sandbox Code Playgroud)
库:
public LiveData<User> getListItem(String itemId){
return userDao.getUSerByID(itemId);
}
Run Code Online (Sandbox Code Playgroud)
DAO:
@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?
Run Code Online (Sandbox Code Playgroud)
假设我们在数据库中插入了新用户.什么@Query("SELECT * FROM User WHERE itemId = :itemId")时候在我们的数据库中有新数据时执行?)以及LiveData如何知道我们在表中有新用户和回调Observer所有者数据已经改变了?
Héc*_*tor 14
在Android Room代码中潜水后,我发现了一些东西:
Room annotation处理器使用javapoet库从Room annotations(@Query,@Insert...)生成代码
根据查询的结果类型(QueryMethodProcessor),它使用"binder"或另一个.在这种情况下LiveData,它使用LiveDataQueryResultBinder.
LiveDataQueryResultBinder生成一个LiveData包含InvalidationTracker.Observer_observer类型字段的类,负责监听数据库更改.
然后,基本上,当数据库中有任何更改时,LiveData将失效并通知客户端(您的存储库).
| 归档时间: |
|
| 查看次数: |
3803 次 |
| 最近记录: |