我正在Android上学习rxjava,并希望完成从互联网上获取数据的任务,显示查看并将其保存到数据库。
从互联网上获取数据后,我想并行,
此外,
我的问题是,如果数据库部分失败,视图上不会显示任何内容。
@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));
Base UseCase(域模块)
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));
}
答案 0 :(得分:1)
就我而言,一个用例就是一个动作。
我的建议是创建两个用例,一个用于获取数据,另一个用于将数据保存到数据库中,它的可读性和可维护性更好。
因此,一旦获取数据,数据应该返回到演示者,例如:
@Override
public void onDataFetched(Data data){
mPresenterView.displayData(data);
mDatabaseUseCase.execute(databaseObserver, databaseParams);
}
因此,即使数据库失败,也会显示数据。
希望这会有所帮助。 抱歉我的英文。