Я использую RxJava в решении MVP, и я хочу добиться этого сценария:
попытаться получить данные сервера, и в случае успеха заполнить представление с использованием данных сервера
если его по какой-либо причине не удалось (без доступа к Интернету - недоступен сервер - внутренняя ошибка сервера) показать соответствующее сообщение , но также заполнить представление с помощью кэшированные данные .
ограничения:
, что я пробовал:
в моем репо:
override fun getRepos(userName: String, page: Int, pageSize: Int):Observable<List<Repo>> {
return githubRemoteService.getReposList(userName, page, pageSize)
.subscribeOn(schedulersProvider.ioThread())
.flatMap { repos ->
val mappedRepos = remoteResponseMapper.mapRepoResponse(repos)
githubLocalService.saveRepos(mappedRepos)
Observable.just(mappedRepos)
}
.onErrorResumeNext(Observable.just(githubLocalService.getReposList(userName, page, pageSize)))
.observeOn(schedulersProvider.mainThread())
}
в моем докладчике:
githubInteractor.getRepos(userName, page, pageSize).subscribe(
{ repos ->
showReposInView(repos)
},
{ error ->
digestAndShowErrorInView(error) //the problem is here - no error will be present here
})
, как мы знаем, когда я использую onErrorResumeNext
, наблюдаемый источник изменяется, но ошибка никогда не будет выдана .
как я могу сначала сгенерировать ошибку, а затем сгенерировать данные локального репо?
если это невозможно сделать, как я могу изменить свой сценарий, чтобы получить тот же сценарий?