Retrofit 2 如何同时调用多个请求
How can I call multiple requests at the same time in Retrofit 2
我有两个不同的 REST 方法,我想同时调用它们。我如何在 Retrofit 2 中执行此操作?
我当然可以一一调用,但是retrofit有什么建议的方法吗?
我希望是这样的:
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
我会看一下将 RxJava 与 Retrofit 结合使用。我喜欢Zip function, but there's a ton of others。这是使用 Java 8:
的 Zip 示例
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
);
结果是
[1, 2]
[3, 4]
[5, 6]
Sequence complete
改造应该不会更困难。
如果您需要状态代码,您的 Retrofit 服务对象应该 return Observable<...>
或 Observable<Result<...>>
。
然后你会打电话给:
Observable.zip(
getMyRetrofitService().getCall1(),
getMyRetrofitService().getCall2(),
(result1, result2) -> return [result1,result2])
.subscribe(combinedResults -> //Combined! Do something fancy here.)
您可以将这两个调用添加到一个集合中,并使用 Java8 的 parallelStream 并行进行两个调用
Arrays.asList( myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request());
我有两个不同的 REST 方法,我想同时调用它们。我如何在 Retrofit 2 中执行此操作?
我当然可以一一调用,但是retrofit有什么建议的方法吗?
我希望是这样的:
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
我会看一下将 RxJava 与 Retrofit 结合使用。我喜欢Zip function, but there's a ton of others。这是使用 Java 8:
的 Zip 示例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
);
结果是
[1, 2]
[3, 4]
[5, 6]
Sequence complete
改造应该不会更困难。
如果您需要状态代码,您的 Retrofit 服务对象应该 return Observable<...>
或 Observable<Result<...>>
。
然后你会打电话给:
Observable.zip(
getMyRetrofitService().getCall1(),
getMyRetrofitService().getCall2(),
(result1, result2) -> return [result1,result2])
.subscribe(combinedResults -> //Combined! Do something fancy here.)
您可以将这两个调用添加到一个集合中,并使用 Java8 的 parallelStream 并行进行两个调用
Arrays.asList( myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request());