1
我正在学习Android上的rxjava,并想完成从互联网获取数据的任务,显示查看并将其保存到数据库。Rxjava Android网络通话后保存到数据库?
一旦数据是从互联网上获取的,我想在并行,
- 显示获取的数据,以查看
- 保存到数据库(在计算线程)
而且,
- 如果网络获取成功,则显示为查看并保存到数据库(并行)
- 如果网络抓取失败,跳过整个过程(onError())
- 如果保存到数据库失败,请忽略并继续向View显示。
我的问题是,如果数据库部分失败,视图上不显示任何内容。
@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();
}
});
演示
getPlacesList.execute(new PlacesListObserver(), GetPlacesListUseCase.Params.forLocation(lat, lng));
基地用例(域模块)
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));
}
'网络 - >数据库 - >查看'对我来说更有意义 – Jahnold