Почему я получаю UndeliverableException - PullRequest
0 голосов
/ 14 февраля 2020

В приложении android процесс идет следующим образом: сначала я выбираю заметки из локального SQLite, а затем выполняю вызовы Http для каждой заметки. Я использую композитный одноразовый материал для хранения всех одноразовых изделий и освобождаю их, когда активность разрушается. Код выглядит примерно так:

class MyActivity : AppCompatActivity(){
    var compositeDisposable = CompositeDisposable()

    override fun onResume(){
        updateDatabaseData()
    }

    fun updateDatabaseData(){
        compositeDisposable.add(
            Observable.fromCallable{
                fetchDataFromDatabase()
            }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap{
                Observable.fromIterable(it)
            }
            .flatMap{
                getUpdateStateObservable(it) // make remote HTTP call for every note in the list from local DB
            }
            .subscribe()
        )
    }

    fun getUpdateStateObservable(note:Note):UpdatedNote{
        Observable.fromCallable(
             // make HTTP call and build some UpdatedNote
        )
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
    }

    fun fetchDataFromDatabase():List<Note>{
        // fetch data from local DB
    }
}

И этот код работал хорошо до того момента, когда соединение inte rnet потеряно. Таким образом, каждый раз при выполнении HTTP-вызовов в методе getUpdateStateObservable выдается ошибка. И иногда приводит к тому, что io.reactivex.exceptions.UndeliverableException указывает на строку, где происходит ошибка сети в getUpdateStateObservable. И иногда это не . Я пытался использовать не пул потоков, а один как Schedulers.single() при выполнении HTTP-запроса. И это хорошо работает. Однако я хотел бы обрабатывать все эти запросы одновременно, чтобы ускорить их.

Спасибо

...