android - 使用 retrofit 和 rxjava 链接请求

标签 android rx-java

<分区>

我需要发出大约 5 个链接请求,例如我有 5 个不同的调用,我想让它们按特定顺序串行而不是并行。

这里有一些我的可观察对象的例子

Observable<ResponseBody> textsCall=EndpointFactory.provideEndpoint().getTexts(textsTask.getLanguage())
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread());

Observable<AirportCombo> routesCall=EndpointFactory.provideEndpoint().getRoutes()
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread());

其实我也不知道rx java上有什么功能。

之前我实现了并行请求,现在我需要串行。

如果您在这里需要并行方法,您是:

Observable<ResponseResult> combined = Observable.zip(textsCall, routesCall, (textsBody, airportCombo) -> {
            //some parsing and other logic
            return new ResponseResult(flag);
        });

最佳答案

您可以使用 flatmap 函数来达到这个目的

textsCall
 .flatMap(new Func1 < ResponseBody, Observable < AirportCombo >> () {
  @Override
  public Observable < AirportCombo > call(ResponseBody valueA) {
   // code to save data from service valueA to db
   // call service B
   return routesCall;
  }
 })
 .flatMap(new Func1 < AirportCombo, Observable < ValueC >> () {
  @Override
  public Observable < ValueC > call(AirportCombo valueB) {
   // code to save data from service valueB to db
   // call service C
   return observableC;
  }
 })
 .flatMap(new Func1 < ValueC, Observable < ValueD >> () {
  @Override
  public Observable < ValueD > call(ValueC valueC) {
   // code to save data from service valueC to db
   // call service D
   return observableD;
  }
 })
 .flatMap(new Func1 < ValueD, Observable < ValueFinal >> () {
  @Override
  public Observable < ValueFinal > call(ValueD valueC) {
   // code to save data from service valueD to db
   // call Final Service
   return observableFinal;
  }
 })
 .subscribeOn(Schedulers.io())
 .observeOn(AndroidSchedulers.mainThread())
 .subscribe(new Subscriber < ValueFinal > () {
  @Override
  public void onCompleted() {}

  @Override
  public void onError(Throwable e) {

  }

  @Override
  public void onNext(ValueFinal fooB) {
   // code to save data from service ValueFinal to db

  }
 });

关于android - 使用 retrofit 和 rxjava 链接请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40867801/

相关文章:

android - onNext 和 onComplete 的行为

java - Apache POI 和 Aspose?

android - 禁用工具栏叠加效果和列表滚动禁用

android 图片保存到 res/drawable 文件夹

android - RxAndroid 重新订阅 Observable 的 onError 和 onComplete

java - 单元测试时的 RxJava Schedulers.immediate() 行为

android - 如果没有 @Provides 或 @Produces 注释的方法,则无法提供 rx.Scheduler

android - GREF 在多线程服务 (aidl) 中增加/减少 - 这是什么意思?

java - 如何在java中每1秒检查一些条件直到为真

java - 如何将可变参数传递给观察者?