2016-09-26 618 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(處理所有的網絡錯誤)仔細圖()