オブザーバブルを一緒にチェーンする方法を見つけようとしています。既存のメソッドがあります: public static Observable<Data> getData()
. 私の他のクラスには、次の既存のコードがあります。
doSomeBackgroundWork()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
getData()
呼び出しをこの呼び出しにチェーンしたいと思います。どうすればいいですか?私はこれを最初に試しました:
doSomeBackgroundWork()
.flatMap(s -> call() {
mApi.getData()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
しかし、getData() コードは実際にはメイン スレッドで実行されるため、これは機能しません。
これでもうまくいきません:
doSomeBackgroundWork()
.concatMap(s -> call() {
mApi.getData()
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })
また、これを試してみると、問題はzipWith
2つのオブザーバブルが並行して実行され、実際に次々に実行したいということです。
doSomeBackgroundWork()
.zipWith(mApi.getData()),
new Func2<BgWork, DataResponse,DataResponse>() {
@Override
public DataResponse call(BgWork bgWork, DatResponse data) {
return data;
}})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<..>() { ... })