我試圖從一個API調用鏈構造一個observable,但我無法讓它工作。我有四個API調用ApiA
,ApiB
,ApiC
和ApiD
返回觀察使用RxJavaCallAdapterFactory
。必須先調用ApiA
和ApiB
,然後在兩者都執行後調用ApiC和ApiD。在執行了最後兩個View之後初始化。我正在使用zip運算符來等待電話完成,我不確定這是要走的路,但我對RxJava
頗爲陌生,所以如果還有其他更好的方法,請告訴我。 下面是我的代碼註釋表示在我被困RxJava使用zip鏈接多個調用
public Observable syncData() {
return Observable.zip(
// these two calls are executed
callApiA(),
callApiB(),
(o, o2) -> Observable.zip(
/* these two calls are not executed, it seems as if this zip has
no subscriber but i don't know why ... */
callApiC(),
callApiD(),
(o, o2) -> {
someLogic();
return Observable.empty();
}));
}
,並鑑於我只是subsribe這種方法
viewModel.syncData().subscribe(
o -> mainAdapter.update(),
throwable -> throwable.printStackTrace()
);
我又是相當新的RxJava所以任何幫助將不勝感激。謝謝
你確定呼叫沒有在主線程上運行嗎?你可以在'callApiX()'上添加'.subscribeOn(Schedulers.io())'。你有日誌嗎? –
所有調用都在Schedulers.io()上,並且沒有錯誤或警告 – TheJudge