2016-09-26 613 views
1

我需要与RxJavaRetrofit实现同步调用。我有一个ArrayList的ids。我需要遍历这个数组,并使用Retrofit来调用web服务器的每个id,但我知道如何做到这一点只有异步,可以告诉我如何做到这一点,当一个通话结束后,下一个开始。RxJava的请求队列

+0

如果你有'onSuccess'回调,那么你可以创建一个方法并传递数组对象,每次你的'onSuccess'被调用直到索引与你的数组大小相同为止,索引迭代的索引就会增加。 –

+0

我想过,但是RxJava可以更清楚地执行这个任务吗? – Near1999

回答

0

你的问题措辞很模糊,但我想我可能已经理解了。从项目列表开始,您可以使用from()创建这些项目的观察值。此值可以在您的API调用后映射。使用concatMap()可以保证结果的顺序,所以您可以有效地观察结果。你可以做任何你想做的事情,甚至可以打电话给toBlocking(),并使可观察的同步。但是这不应该有任何需要。

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

.single()方法做什么? – Near1999

+0

给你第一个项目,如果有或多或少的话会抛出。 – tynn

+0

它不适用于改造 – Near1999

0

此代码将执行它们synchronious

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

但是你需要从callToWebServer(处理所有的网络错误)仔细图()