使用RxJava

时间:2016-09-26 05:33:55

标签: android rx-java rx-android

我需要使用RxJavaRetrofit实现同步调用。我有ArrayList个ID。我需要迭代这个数组并使用Retrofit为每个id调用Web服务器,但是我知道如何只执行async,你可以告诉我如何在一次调用完成后在队列中执行此操作下一个开始。

2 个答案:

答案 0 :(得分:1)

你的问题含糊不清,但我想我可能已经明白了。从项目列表开始,您可以使用from()创建这些项目的可观察对象。可以在API调用之后映射此值。使用concatMap()可以保证结果的顺序,因此您可以有效地获得结果的可观察性。您可以随意执行哪些操作,甚至可以在其上调用toBlocking()并使可观察的同步。但是不应该有这个需要。

List<Result> results =
        Observable.from(ids)
                  .concatMap(id -> callToWebServer(id))
                  .toList()
                  .toBlocking()
                  .single();

答案 1 :(得分:1)

此代码将同步执行它们

Observable.from(ids)
          .map(id -> callToWebServer(id).toBlocking().first())

但您需要在 map()中小心处理来自 callToWebServer()的所有网络错误。