我需要一些幫助來實現使用RxJava2的並行異步調用& Retrofit2。 我的要求是;如何使用RxJava2和Retrofit2創建並行多個非阻塞服務請求
1)我有多個保險公司(現在我只需要兩個),我需要發送多個使用該保險公司名稱的並行請求。
2)如果它們中的任何一個給服務器錯誤,那麼其餘的請求不應該被阻塞。
以下是我到現在爲止所嘗試的;
ArrayList<String> arrInsurer = new ArrayList<>();
arrInsurer.add(AppConstant.HDFC);
arrInsurer.add(AppConstant.ITGI);
RequestInterface service = getService(ServiceAPI.CAR_BASE_URL);
for (String insurerName : arrInsurer) {
service.viewQuote(Utils.getPrefQuoteId(QuoteListActivity.this), insurerName)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ViewQuoteResDTO>() {
@Override
public void accept(@NonNull ViewQuoteResDTO viewQuoteResDTO) throws Exception {
Log.e("Demo", viewQuoteResDTO.getPremiumData().getIDV()+"");
updateList();
}
}, new Consumer<Throwable>() {
@Override
public void accept(@NonNull Throwable throwable) throws Exception {
Log.e("Demo", throwable.getMessage());
}
});
}
private RequestInterface getService(String baseUrl) {
Gson gson = new GsonBuilder()
.setLenient()
.create();
return new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.build().create(RequestInterface.class);
}
現在,上面的代碼只有在兩個請求都能成功響應的情況下才能正常工作。但是當任何請求作爲內部服務器錯誤發出響應時,請求的其餘部分也會被阻塞。
下面的任何一個請求給出的日誌錯誤我得到失敗響應;
E/Demo: HTTP 500 Aww Snap, Some thing happened at server. Please try back again later.
E/Demo: unexpected end of stream on Connection{100.xxx.xxx.xx:portNo, [email protected] hostAddress=/100.xxx.xxx.xx:portNo cipherSuite=none protocol=http/1.1}
如何處理這個錯誤?