여러 관찰 데이터를 사용하여 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 및 어리석은 경우 (instanceOf ArrayList) 절을 만들려고했지만 잘못된 방법입니다. 누군가 나를 도울 수 있습니까?
'concat' 순서대로 모든 관찰 가능한를 호출 할 필요가 대신 CONCAT를 사용 는() 나는 flatMap()을 사용했다. –