У меня есть следующий код, я использую модификацию в сочетании с RX для выполнения нескольких вызовов, для краткости я добавляю только три вызова:
public void getDashboardData(final String userKey, final String sign) {
final DashboardDataApi service = RetrofitInstance.getRetrofitInstance().create(DashboardDataApi.class);
Observable<ResponseBody> aGetApi = service.aGetApi(userKey, sign);
final Observable<ResponseBody> dGet = service.dGet(userKey, sign);
final Observable<ResponseBody> bOnGet = service.bonGet(userKey, sign);
final List<ResponseBody> result = new ArrayList<>();
Disposable disposable = aGetApi
.subscribeOn(Schedulers.io())
.flatMap(new Function<ResponseBody, ObservableSource<ResponseBody>>() {
@Override
public ObservableSource<ResponseBody> apply(ResponseBody response1) {
result.add(response1);
return dGet;
}
})
.flatMap(new Function<ResponseBody, ObservableSource<ResponseBody>>() {
@Override
public ObservableSource<ResponseBody> apply(ResponseBody response1) {
result.add(response1);
return bOnGet;
}
}).map(new Function<ResponseBody, ResponseBody>() {
@Override
public ResponseBody apply(ResponseBody response3) {
result.add(response3);
return response3;
}
}).observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver<ResponseBody>() {
@Override
public void onNext(ResponseBody responseBody) {
try {
String jsonData = responseBody.string();
Log.d("RX", "RESP: " + jsonData);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
Log.d("RX", "Error");
e.printStackTrace();
}
@Override
public void onComplete() {
Log.d("RX", "RX Flat Map chaining complete");
}
});
}
Теперь я застрял в следующих местах:
1) Если один Api выходит из строя, я должен подождать и повторить, пока не получу результат.
2) Как только все будет готово, я должен заполнить объект результата.
Я довольно новичок в RX, так что сейчас не так много.