Я следую шаблону хранилища MVP.Я хочу показать пользователю список данных, но моя идея - следовать шаблону хранилища.Это означает, что у меня есть репозиторий, с которым разговаривает докладчик.Этот репозиторий общается с 2 источниками данных - хранилищем и RemoteAPI.
Сначала репозиторий предоставляет докладчику список данных из хранилища и параллельно выполняет вызов RemoteAPI, если есть Интернет, чтобы получить последний список данных.и сохраняет в хранилище и возвращает его докладчику.
Также, когда нет интернета, мне нужно показать пользователю, что интернета нет вместе с данными из хранилища.
Вот мой код в репозитории -
return Observable.create<ArrayList<Data>> { subscriber ->
val dataFromCache = storage?.dataFromCache()
val fromCache = dataFromCache != null && dataFromCache.isNotEmpty()
if (fromCache) {
subscriber.onNext(dataFromCache)
}
if (Utils.isInternetOn(context)) {
// attempt to update from online source
try {
remoteApi?.getDataFromAPI()
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Subscriber<ArrayList<Data>>() {
override fun onCompleted() {
subscriber.onCompleted()
}
override fun onError(e: Throwable) {
if (fromCache) {
subscriber.onCompleted()
} else {
subscriber.onError(e)
}
}
override fun onNext(response: ArrayList<Data>) {
// notify subscriber
subscriber.onNext(response)
// write to cache
storage?.storeData(response)
subscriber.onCompleted()
}
})
} catch (e: Exception) {
// If we used the cache as fallback, this is not an issue
if (fromCache) {
subscriber.onCompleted()
} else {
subscriber.onError(e)
}
}
} else {
subscriber.onError(Exception("NO_INTERNET"))
}
}
Но проблема в том, что когда нет интернета, он переходит к другой части кода и выдает NO_INTERNET.Как получить данные из хранилища, а также исключение NO_INTERNET одновременно?