Rx java 网络呼叫后Rxjava Android是否保存到数据库?

Rx java 网络呼叫后Rxjava Android是否保存到数据库?,rx-java,mvp,rx-android,Rx Java,Mvp,Rx Android,我正在android上学习rxjava,希望能够完成从互联网上获取数据、显示视图并将其保存到数据库的任务 一旦从互联网上获取数据,我想同时 将提取的数据显示到视图中 保存到数据库(在计算线程上) 而且 如果网络获取成功,则显示查看+保存到数据库(并行) 如果网络获取失败,则跳过整个过程(onError()) 如果保存到数据库失败,请忽略并继续显示以查看 我的问题是,如果数据库部分出现故障,视图上不会显示任何内容 @Override public Observable<List

我正在android上学习rxjava,希望能够完成从互联网上获取数据、显示视图并将其保存到数据库的任务

一旦从互联网上获取数据,我想同时

  • 将提取的数据显示到视图中
  • 保存到数据库(在计算线程上)
而且

  • 如果网络获取成功,则显示查看+保存到数据库(并行)
  • 如果网络获取失败,则跳过整个过程(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);
}