2016-03-06 61 views
6

我有两种不同的REST方法,我想同时调用它们。我如何在改造2中做到这一点?如何在改装2中同时调用多个请求

我可以一个一个地打电话给他们,但是有没有建议的改造方法?

我希望是这样的:

Call<...> call1 = myService.getCall1(); 
Call<...> call2 = myService.getCall2(); 

MagicRetrofit.call (call1,call2,new Callback(...) {...}); // and this calls them at the same time, but give me result with one method 

回答

7

我会看看使用RxJava与改造。我喜欢Zip函数,but there's a ton of others。下面是使用Java 8邮编的例子:在

[1, 2] 
[3, 4] 
[5, 6] 
Sequence complete 

改造这结果不应该被困难得多

odds = Observable.from([1, 3, 5, 7, 9]); 
evens = Observable.from([2, 4, 6]); 

Observable.zip(odds, evens, {o, e -> [o, e]}).subscribe(
    { println(it); },       // onNext 
    { println("Error: " + it.getMessage()); }, // onError 
    { println("Sequence complete"); }   // onCompleted 
); 

您的翻新服务如果您需要状态码,对象应返回Observable<...>Observable<Result<...>>

你会随后致电:

Observable.zip(
    getMyRetrofitService().getCall1(), 
    getMyRetrofitService().getCall2(), 
    (result1, result2) -> return [result1,result2]) 
    .subscribe(combinedResults -> //Combined! Do something fancy here.) 
+0

如果1个请求失败的两个电话,将它停止整个执行? @bkach? – ericn

+0

对于HTTP状态代码:对于改进1,是的,它会停止执行并抛出异常。随着改造2它不会。 [来源(​​根据请求执行)](https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9)。否则 - 在任何其他“失败”(崩溃等) - 是的,它会停止执行并抛出异常。这可以在我上面例子中没有实现的'onError'中处理。 – bkach

0

您可以在集合中添加两个呼叫,并使用Java8的parallelStream使并行

Arrays.asList(myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request()); 
相关问题