我正在分析Android体系结构组件示例应用程序( BasicSample )。如果只有一个来源,他们为什么在MediatorLiveData
类中使用DataRepository
?
mObservableProducts = new MediatorLiveData<>();
mObservableProducts.addSource(mDatabase.productDao().loadAllProducts(),
productEntities -> {
if (mDatabase.getDatabaseCreated().getValue() != null) {
mObservableProducts.postValue(productEntities);
}
});
我认为他们应该只使用DAO的LiveData<List<ProductEntity>
并使用getter方法对其进行简化:
public LiveData<List<ProductEntity>> getProducts() {
return mDatabase.productDao().loadAllProducts();
}
他们如何处理其他DAO请求:
public LiveData<List<ProductEntity>> getProducts() {
return mObservableProducts;
}
public LiveData<ProductEntity> loadProduct(final int productId) {
return mDatabase.productDao().loadProduct(productId);
}
public LiveData<List<CommentEntity>> loadComments(final int productId) {
return mDatabase.commentDao().loadComments(productId);
}
public LiveData<List<ProductEntity>> searchProducts(String query) {
return mDatabase.productDao().searchAllProducts(query);
}
同一问题与ProductListViewModel
有关。他们再次仅使用一个来源创建了MediatorLiveData
。
mRepository = ((BasicApp) application).getRepository();
LiveData<List<ProductEntity>> products = mRepository.getProducts();
// observe the changes of the products from the database and forward them
mObservableProducts.addSource(products, mObservableProducts::setValue);
答案 0 :(得分:0)
他们有意在将初始数据插入数据库之前过滤DAO排放。这就是您提到的MediatorLiveData所做的。
如果您不需要像他们一样等待“初始数据集”的加载,则可以抛开MediatorLiveData
并直接使用mDatabase.productDao().loadAllProducts();
。