В приложении 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-запроса. И это хорошо работает. Однако я хотел бы обрабатывать все эти запросы одновременно, чтобы ускорить их.
Спасибо