私はAndroid上でRXJavaを使用していて、複数のAPIコールを連鎖しようとしており、両方のAPIコールが終了した後で何かを行います。私のAPIは、提供されているコードサンプルに似ています。基本的にAPI呼び出しを行い、onNextのDBに各レコードを書き込み、すべてのレコードが書き込まれた後に、いくつかのキャッシュを更新します。私はこれらの呼び出しを両方とも非同期的に起動し、両方がonCompletedを呼び出した後に何か他のことをしたいと思います。これを行うRXの正しい方法は何ですか?私は、私は別のストリームを結びつける必要はないので、私はジップが必要とは思わない。私はおそらくマージすると思っていたが、私の2つのAPI呼び出しは異なるタイプのObservableを返す。私にお知らせください。ありがとう。複数のオブザーバブルが完了した後で何かをする
getUsers()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.flatMap(Observable::from)
.subscribe(new Subscriber<User>() {
@Override
public void onCompleted() {
updateUserCache();
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "Error loading users", e);
}
@Override
public void onNext(User user) {
insertUserToDB(user);
}
});
getLocations()
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.flatMap(Observable::from)
.subscribe(new Subscriber<Location>() {
@Override
public void onCompleted() {
updateLocationCache();
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "Error loading Locations", e);
}
@Override
public void onNext(Location location) {
insertLocationToDB(location);
}
});
ありがとうございます。いくつかの質問。まず、insertUserToDBの呼び出しは、subscribeメソッド呼び出しで発生する必要はありません。これは、toList()のオブザーバブルを返すことができないことを意味しますか? – Sam
私はdoOnNextを使ってデータベースに挿入しました。 – Sam