Я анализировал образец приложения для компонентов архитектуры Android (BasicSample). Почему они используют MediatorLiveData
в DataRepository
классе, если к нему прикреплен только один источник?
mObservableProducts = new MediatorLiveData<>();
mObservableProducts.addSource(mDatabase.productDao().loadAllProducts(),
productEntities -> {
if (mDatabase.getDatabaseCreated().getValue() != null) {
mObservableProducts.postValue(productEntities);
}
});
Я думаю, им следует просто использовать LiveData<List<ProductEntity>
, поступающие из DAO, и упростить это с помощью метода получения:
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);
public LiveData<List<ProductEntity>> getProducts() { return mDatabase.productDao().loadAllProducts(); }
без созданияMediator
? - person AppiDevo   schedule 05.01.2019