2016-03-06 9 views
6

2つの異なるRESTメソッドがあり、同時に呼び出す必要があります。 Retrofit 2でどうすればいいですか?Retrofit 2で複数のリクエストを同時に呼び出す方法

私はそれらを1つずつ呼び出すことができますが、改造にはどのような推奨方法がありますか?

は私が期待してのようなもの:私は改修でRxJavaを使用して見てみましょう

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

。私はZipファンクション、but there's a ton of othersが好きです。

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 

改修になり:ここでのJava 8を使用して郵便番号の例を示します。

ステータスコードが必要な場合は、オブジェクトはObservable<...>またはObservable<Result<...>>を返す必要があります。

あなたはその後、呼びたい:

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

で2本の電話をかけることがJava8のparallelStreamを使用することができ、これます実行全体を停止しますか? @bkach? – ericn

+0

HTTPステータスコードに関して:Retrofit 1では、実行を停止して例外をスローします。 Retrofit 2ではそれはしません。 [ソース(リクエスト実行中)](https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9)。さもなければ - 他の "失敗"(クラッシュなど)で - はいそれは実行を停止し、例外をスローします。これは、上記の例で実装していないonErrorで扱うことができます。 – bkach

0

をあなたがコレクションに両方の呼び出しを追加し、1つの要求が失敗した場合、並列

Arrays.asList(myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request()); 
関連する問題