Android Rxjava,如何阻塞直到完成?
所以我有3个rest服务要调用,问题是,我需要服务1在调用服务2之前完成,我需要服务2在调用服务3之前完成 因为每次我都需要将数据从上一个服务传递到下一个服务 现在我正在链接我的任务,但我不喜欢它,因为方法命名变得非常庞大 服务1的示例Android Rxjava,如何阻塞直到完成?,android,asynchronous,retrofit2,rx-java2,Android,Asynchronous,Retrofit2,Rx Java2,所以我有3个rest服务要调用,问题是,我需要服务1在调用服务2之前完成,我需要服务2在调用服务3之前完成 因为每次我都需要将数据从上一个服务传递到下一个服务 现在我正在链接我的任务,但我不喜欢它,因为方法命名变得非常庞大 服务1的示例 compositeDisposable.add(simpleRetrofitService.getInventaireDisponibleResultatDtos() .subscribeOn(Schedulers.io())
compositeDisposable.add(simpleRetrofitService.getInventaireDisponibleResultatDtos()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(this::callService2Then3ThenSaveThenGoToNextScreen,
this::logErrorAndDisplayPopup));
调用服务一个接一个,然后保存下一个屏幕
然后定义另一个调用callService3ThenSaveThenFoToNextScreen的asynctask
有什么想法吗
谢谢
编辑:精度
Call1将返回一个包含整数列表的对象,如[1,2,8,132]
然后我必须为每个整数调用call2。
call3也是一样,call2给了我一些值,我必须为每个值调用call3。为了简单起见,我假设您的调用是simpleRetrofitService.call1。simpleRetrofitService.call2和simpleRetrofitService.call3。我还假设他们回来了 然后,您可以使用以下工具执行一些基本操作: 您根本不需要异步任务 更新为对问题更新的回应: 假设您的呼叫返回列表,您可以使用以下方法执行类似操作:
在任务完成之前,这不会特别阻塞—相反,它会将每个请求链接到下一个请求,从而达到预期的结果。我写了一个类似的答案来回答这个so+1:问题是如果call1返回[7,8,12,15],我将不得不调用simpleRetrofitService.call2xxx 4次,参数为7,8,12和15,然后您必须提供问题的详细信息。显然,你是在处理可观察的事物。需要更具体的信息。
simpleRetrofitService.call1()
.flatMap(r1 -> simpleRetrofitService.call2(r1))
.flatMap(r2 -> simpleRetrofitService.call3(r2))
.subscribeOn(...)
.observeOn(...)
.subscribe(...)
simpleRetorfitService.call1()
.flattenAsObservable(...)
.flatMap(listItem -> simpleRetrofitService.call2(listItem)
...