kotlin - 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()
}
解决方案
推荐阅读
- laravel - 多对多多态关系中的自定义透视列名称?
- angular - 使用 Angular Universal 在 Angular 中执行服务器端渲染时,页面重定向后无法看到我的 html 源代码
- nao-robot - 听到触发语句但不触发行为
- c# - 如何覆盖newtonsoft json中的“Required.Always”
- python-3.x - 通过 Google Drive File Stream 上传大量文件
- ruby-on-rails - 如何对角色的权限进行分组
- javascript - 为什么 state.map(foo => <>{foo}) 不显示任何内容?
- reactjs - 静态站点的环境变量?
- machine-learning - AttributeError : 'tuple' 没有属性 'to'
- flutter - Flutter:在构建期间调用 setState() 或 markNeedsBuild()