0

在 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 请求时不使用线程池,而是使用单个线程池。这很好用。但是,我想同时处理所有这些请求以加快它们的速度。

谢谢

4

0 回答 0