Почему я получаю UndeliverableException

В приложении для 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
    }
}

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

Спасибо


person Allison Catcher    schedule 14.02.2020    source источник
comment
ты это проверял? stackoverflow.com/ вопросы/43884764/   -  person Nour Eldien Mohamed    schedule 14.02.2020
comment
Это не то, что я ищу. Я понимаю, что внутри getUpdateStateObservable каждый вызов HTTP приводит к исключению. Проблема заключается в том, что эти исключения происходят одновременно (см. subscribeOn(Schedulers.io())), что приводит к исключению UndeliverableException. Но когда я переключаюсь на обработку запросов последовательно как Schedulers.single(), это работает хорошо. Почему это?   -  person Allison Catcher    schedule 15.02.2020