在 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
}
}
这段代码运行良好,直到互联网连接丢失。因此,每次在方法getUpdateStateObservable
中进行 HTTP 调用时都会引发错误。有时它会导致io.reactivex.exceptions.UndeliverableException
指向getUpdateStateObservable
发生网络错误的行。有时它不是。我试图Schedulers.single()
在发出 HTTP 请求时不使用线程池,而是使用单个线程池。这很好用。但是,我想同时处理所有这些请求以加快它们的速度。
谢谢