Rx java 网络呼叫后Rxjava Android是否保存到数据库?
我正在android上学习rxjava,希望能够完成从互联网上获取数据、显示视图并将其保存到数据库的任务 一旦从互联网上获取数据,我想同时Rx java 网络呼叫后Rxjava Android是否保存到数据库?,rx-java,mvp,rx-android,Rx Java,Mvp,Rx Android,我正在android上学习rxjava,希望能够完成从互联网上获取数据、显示视图并将其保存到数据库的任务 一旦从互联网上获取数据,我想同时 将提取的数据显示到视图中 保存到数据库(在计算线程上) 而且 如果网络获取成功,则显示查看+保存到数据库(并行) 如果网络获取失败,则跳过整个过程(onError()) 如果保存到数据库失败,请忽略并继续显示以查看 我的问题是,如果数据库部分出现故障,视图上不会显示任何内容 @Override public Observable<List
- 将提取的数据显示到视图中
- 保存到数据库(在计算线程上)
- 如果网络获取成功,则显示查看+保存到数据库(并行)
- 如果网络获取失败,则跳过整个过程(onError())
- 如果保存到数据库失败,请忽略并继续显示以查看
@Override
public Observable<List<NearByPlacesDetail>> getNearbyTouristSpotsList(String latlng) {
Observable<NearByPlacesMain> nearByPlacesMainObservable = googleMapApi.getTouristAttractions(latlng);
return nearByPlacesMainObservable
.map(NearByPlacesMain::getResults)
.onExceptionResumeNext(new Observable<List<NearByPlacesDetail>>() {
@Override
protected void subscribeActual(Observer<? super List<NearByPlacesDetail>> observer) {
Throwable throwable = new Throwable("Network fetch error");
Timber.e(throwable, "Error fetching data from internet.");
observer.onError(throwable);
}
})
.observeOn(Schedulers.computation())
.doOnNext(nearByPlacesDetails -> {
databaseManager.getDatabase().delete(); // Force failure
databaseManager.savePlacesList(nearByPlacesDetails);
})
.onExceptionResumeNext(new Observable<List<NearByPlacesDetail>>() {
@Override
protected void subscribeActual(Observer<? super List<NearByPlacesDetail>> observer) {
Timber.e("Error saving to database.");
observer.onComplete();
}
});
基本用例(域模块)
public void execute(DisposableObserver-observer,Params-Params){
先决条件。checkNotNull(观察者);
最终可观测=此.buildUseCaseObservable(参数)
.subscribeOn(订阅调度程序)
.observeOn(observeScheduler);
可观察的(观察者);
}
在我看来,用例是针对一个操作的
我的建议是创建两个用例,一个用于获取数据,另一个用于将数据保存到数据库中,这样对可读性和可维护性更好
因此,一旦获取数据,数据应返回给演示者,例如:
@Override
public void onDataFetched(Data data){
mPresenterView.displayData(data);
mDatabaseUseCase.execute(databaseObserver, databaseParams);
}
因此,即使数据库失败,也会显示数据
希望这有帮助。
对不起,我的英语太差了。网络->数据库->查看对我来说更有意义
public void execute(DisposableObserver<T> observer, Params params) {
Preconditions.checkNotNull(observer);
final Observable<T> observable = this.buildUseCaseObservable(params)
.subscribeOn(subscribeScheduler)
.observeOn(observeScheduler);
addDisposable(observable.subscribeWith(observer));
}
@Override
public void onDataFetched(Data data){
mPresenterView.displayData(data);
mDatabaseUseCase.execute(databaseObserver, databaseParams);
}