複数の観測値を使用してDBをリロードする方法があります。結局のところ、メソッドsetupPlace(selecetedPlace)を呼び出す必要があります。各オブザーバブルは、異なるオブジェクト(void、object、listOfObjects)を返します。RxJavaは、すべての処理が完了した後にsthを実行します。
private void reloadDatabaseFromRest(final Place selectedPlace, final Event selectedEvent) throws ParseException {
Observable.concat(DatabaseManager.getInstance().clearDatabase(),
mPlaceUseCase.getPlacesListFromRestObservable()
.filter(places -> places != null && !places.isEmpty())
.doOnNext(places -> mPlaceUseCase.savePlacesToRepository(places)),
mPlaceUseCase.saveSelectedPlace(selectedPlace),
mEventUseCase.getEvenListObservableFromRest(selectedPlace.getId())
.doOnNext(eventList -> mEventUseCase.saveEventsToRepository(eventList)),
mEventUseCase.saveSelectedEventObservable(selectedEvent))
.takeLast(1)
.subscribe(o -> mSplashScreenUI.setupPlace(selectedPlace));
}
しかし、この方法は、(subsribeを行っているが)最後に観察し、他人に(私は右だ?)が呼び出されていません。私はフィルターを使用して、zipと愚かなif(instanceOf ArrayList)節を作成しようとしましたが、それは間違った方法です。誰か助けてくれますか?
'concat'順に、すべての観測を呼び出すべきです。 –