2

オブザーバブルを一緒にチェーンする方法を見つけようとしています。既存のメソッドがあります: 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<..>() { ... })

また、これを試してみると、問題はzipWith2つのオブザーバブルが並行して実行され、実際に次々に実行したいということです。

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<..>() { ... })
4

1 に答える 1