Android MVP Репозиторий шаблон интернет-проверки - PullRequest
0 голосов
/ 30 декабря 2018

Я следую шаблону хранилища 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 одновременно?

...