Android 加载数据反应/非反应、LiveData、RxJava
首先,我要说我读了一百万个博客,看了一千多个视频,我对这个页面越来越困惑。。喋喋不休地输入这些信息有助于我解决一些问题 TL;博士 主要问题是,对于UI层,如何反应式地(使用后台线程)检索数据,对于已经在后台线程上调用了您的方法的业务层方法,如何正常地(在方法中内联)检索数据。您的回购和Dao是否需要多个方法来执行相同的查询Android 加载数据反应/非反应、LiveData、RxJava,android,rx-java2,android-architecture-components,android-livedata,Android,Rx Java2,Android Architecture Components,Android Livedata,首先,我要说我读了一百万个博客,看了一千多个视频,我对这个页面越来越困惑。。喋喋不休地输入这些信息有助于我解决一些问题 TL;博士 主要问题是,对于UI层,如何反应式地(使用后台线程)检索数据,对于已经在后台线程上调用了您的方法的业务层方法,如何正常地(在方法中内联)检索数据。您的回购和Dao是否需要多个方法来执行相同的查询 @Query("Select * from Product WHERE Product.ProductId = :id") ProductDb getForId(Integ
@Query("Select * from Product WHERE Product.ProductId = :id")
ProductDb getForId(Integer id);
@Query("Select * from Product WHERE Product.ProductId = :id")
LiveData<ProductDb> getForIdLive(Integer id);
@Query("Select * from Product WHERE Product.ProductId = :id")
Maybe<ProductDb> getForIdRx(Integer id);
ViewModel有一个方法
public LiveData<Product> getProductById(int id) {
return mReferenceDataRepository.loadProductById(id);
}
但该方法返回的是LiveData,而不仅仅是POJO产品
我现在是否需要存储库中的其他方法
我也从同样的角度研究了RxJava。您可以从Dao返回一个Maybe,事实上,Rx更容易管理异常。但它也有同样的问题——在存储库和Dao中是否需要单独的方法
事实上,使用存储库的原因是您可以切换出实现。如果您的方法公开了LiveData,或者您真的可以轻松地切换实现吗?您好,我想问一下您是否找到了解决此问题的令人满意的解决方案?我认为这是结构良好的应用程序中非常常见的问题。我想到的不同解决方案是注册一个观察者,然后在收到第一个值后取消注册,但这似乎是非常糟糕的解决方法。
mMyViewModel.getProductById(productId).observe(this,productObserver);
public LiveData<Product> getProductById(int id) {
return mReferenceDataRepository.loadProductById(id);
}
public LiveData<Product> loadProductById(int id) {
return mProductDao.loadProductById(id);
}
@Query("SELECT * from Product WHERE ProductId = :id")
LiveData<Product> loadProductById(int id);
Product p = mReferenceDataRepository.loadProductById(productId);
Location l = mReferenceDataRepository.loadLocationById(locationId);
if (p.getQuarantine())....
if (l.getIsQuarantine())....