2016-03-06 25 views
6

İki farklı REST yöntemim var ve bunları aynı anda aramak istiyorum. Bunu Güçlendirme 2'de nasıl yapabilirim?Retrofit 2'de aynı anda birden çok isteği nasıl arayabilirim?

Bunları teker teker arayabilirim, ancak uyarlamada önerilen herhangi bir yöntem var mı?

beklediğim gibi bir şey: Ben Retrofit ile RxJava kullanarak bir göz alacağını

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 

cevap

7

. Zip işlevini, but there's a ton of others'u seviyorum.

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 
); 

çok daha zor olmamalı

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

Recommended sonuçlanır: Burada Java 8 kullanarak Zip bir örnek.

Yükseltme servisiniz Durum kodlarını istiyorsanız, nesneler bir Observable<...> veya Observable<Result<...>> numaralı ürünü iade etmelidir. Bunu olacaktır

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

eğer iki görüşme yapmak için:

Daha sonra arayacağını tüm infazını durdurmak mı? @bkach? – ericn

+0

HTTP durum kodları ile ilgili olarak: Retrofit 1 ile evet, yürütmeyi durdurur ve bir istisna atar. Retrofit 2 ile değil. [Kaynak (istek yürütme altında)] (https://futurestud.io/tutorials/retrofit-2-upgrade-guide-from-1-9). Aksi takdirde - başka bir "başarısızlık" durumunda (çökme, vb.) - evet, yürütmeyi durdurur ve istisnayı atar. Bu, yukarıdaki örnekte uygulamamış olan "onError" içinde işlenebilir. – bkach

0

Bir koleksiyonunda hem görüşmesi ekleyebilir ve Java8 ait parallelStream kullanılarak 1 isteği başarısız paralel

Arrays.asList(myService.getCall1(), myService.getCall2()).parallelStream().map(call->call.request()); 
İlgili konular