Когда я выключил Интернет и проведу пальцем, чтобы обновить в первый раз, все работает нормально (отключение обновления и отображение NetworkErrorView
), но когда я проведу пальцем, чтобы обновить во второй раз, обновление состояния зависает и, как я понимаю, в SingleObserver
не звонит ни onSuccess
(потому что интернет отключен, хорошо), ни onError
, который должен звонить, потому что интернет выключен, в результате doAfterTerminate
также не звонит.
Кстати,
dataManager.getCitiesFromDb()
возврат Observable(City)
и dataManager.getCityConditionsResponse()
возврат Single(List(City))
MainActivity (onCreate)
presenter.setRefreshObservable(RxSwipeRefreshLayout.refreshes(swipeRefreshLayout));
Ведущий
@Override
public void setRefreshObservable(Observable<Object> observable) {
observable
.flatMapSingle(l -> getCitiesListObservable()
.flatMap(list -> Single.fromObservable(Observable.fromIterable(list)))
.map(city -> city))
.toList()
.subscribe(new SingleObserver<List<City>>() {
@Override
public void onSubscribe(Disposable d) {
disposables.add(d);
}
@Override
public void onSuccess(List<City> list) {
view.showCitiesList(list);
}
@Override
public void onError(Throwable e) {
view.showNetworkErrorView();
}
});
}
private Single<List<City>> getCitiesListObservable() {
return dataManager.getCitiesFromDb()
.flatMapSingle(city ->
dataManager.getCityConditionsResponse(city.getQuery())
.map(response -> {
city.setTemp(response.getTemp());
city.setIcon(response.getIcon());
return city;
})
)
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> view.hideRefreshingStatus());
}