私は2つのAPIを順番にリクエストし、そのデータをSQLiteに保存したいと思います。Retrofit + RxJavaでリクエストをチェイン化
まず私はAPI A
への要求を作成し、SQLテーブルa
にデータを格納します。 API B
に依頼し、テーブルb
にデータを、テーブルa_b
にデータを格納します。 a_b
に格納されたデータは、リクエストB
からのものです。
RxJavaを使用してこれを行うにはどうすればよいですか。私は、ラムダ関数を使用していなかった場合は、このためにflatMapを使用することについて、どこかこの
apiService.A()
// store in DB here? How? maybe use map()?
.flatMap(modelA -> {
// or maybe store modelA in DB here?
return apiService.B().map(modelB -> {
storeInDB()l // store B here ?
return modelB;
});
});
のようなものを読んで、これは通常のネストされた呼び出しのように醜いになります。これはもっと良い方法ですか?
私はRxの 'do'演算子について知らなかった。 docsを読んだ後、doOnCompleteはこれに対してより良い機能ではないのですか? – Sourabh
@Sourabhそれはあなたの 'Observable'に依存します。 apiからの呼び出しが成功した後に 'onComplete'が呼び出された場合は、yesになります。あなたの 'Observable'が複数のイベントを出すことができるなら、' doOnNext'のために行くべきです。あなたのケースでは 'doOnNext'と' doOnComplete'を使った 'Retrofit'は同じ結果になりますが、実際には' doOnComplete'はちょっと直感的です(純粋な習慣から 'doOnNext'を使いました)。私は意味 –
、 'doOnComplete'を使用してdoOnComplete'代わりに、(B 'として' flatMap' – Sourabh