首页 > 解决方案 > Observable.fromCallable 并且订阅从未执行

问题描述

我正在创建一个 android 应用程序,它读取和存储领域数据库中特定电子表格文件的内容。这个应用程序使用 Sheets API 和 reactivex。但是,当我运行它时,它总是以失败告终,即在读取文件后没有存储任何内容。根据调试结果,在订阅 Observable 期间更新的电子表格中存储内容的 Map 对象始终为空。所以,我想这是因为 Observable.fromCallable 中定义的执行从未被调用过。但是,我无法弄清楚如何解决它。

这是这个应用程序的阅读过程的代码。有人可以帮我解决这个问题吗?

PS为了实现这个程序,我引用了下面网站的大部分代码。

https://medium.com/@pedrocarrillo/creating-a-spreadsheet-in-android-210d68412a2e

private fun startReadingSpreadsheet(spreadSheetId : String, range : String) {
        dictMap.clear()

        readSpreadSheetDisposable =
            sheetsRepository.readSpreadSheet(spreadSheetId, range)
                .subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnError { view.showError("Error!") }
                .subscribe(Consumer {
                    val pairs = it
                    pairs.map { dictMap[it.first.toString()] = dictMap[it.second.toString()]}
                    Log.d("Sheet :", it.toString())
                })
    }
class SheetsRepository(private val sheetsAPIDataSource: SheetsAPIDataSource) {
    fun readSpreadSheet(spreadsheetId : String,
                        spreadsheetRange : String): Single<MutableList<Pair<Any, Any>>> {
        return sheetsAPIDataSource.readSpreadSheet(spreadsheetId, spreadsheetRange)
    }
}
override fun readSpreadSheet(spreadsheetId: String,
                                 spreadsheetRange: String): Single<MutableList<Pair<Any, Any>>> {

        return Observable
            .fromCallable {
                Log.d("spread sheet reading", "started!")
                val response = sheetsAPI.spreadsheets()
                    .values()
                    .get(spreadsheetId, spreadsheetRange)
                    .execute()
                response.getValues()
            }.map { it[0].zip(it[1]) }.flatMapIterable { it -> it }
            .toList()
}

标签: kotlingoogle-sheets-apireactivex

解决方案


推荐阅读