Kotlin Observable.fromCallable,订阅从未执行
我正在创建一个android应用程序,它读取并存储领域数据库中特定电子表格文件的内容。此应用程序正在使用Sheets API和reactivex。但是,当我运行它时,它总是以失败告终,即读取文件后没有存储任何内容。 根据调试结果,在订阅Observable期间更新的电子表格中存储内容的Map对象始终为空。所以,我猜这是因为Observable.fromCallable中定义的执行从未被调用。但是,我不知道如何修复它 以下是本应用程序的阅读程序代码。有人能帮我解决这个问题吗 另外,为了实施这个计划,我引用了下面网站上的大部分代码Kotlin Observable.fromCallable,订阅从未执行,kotlin,google-sheets-api,reactivex,Kotlin,Google Sheets Api,Reactivex,我正在创建一个android应用程序,它读取并存储领域数据库中特定电子表格文件的内容。此应用程序正在使用Sheets API和reactivex。但是,当我运行它时,它总是以失败告终,即读取文件后没有存储任何内容。 根据调试结果,在订阅Observable期间更新的电子表格中存储内容的Map对象始终为空。所以,我猜这是因为Observable.fromCallable中定义的执行从未被调用。但是,我不知道如何修复它 以下是本应用程序的阅读程序代码。有人能帮我解决这个问题吗 另外,为了实施这个计划
class SheetsRepository(私有val SheetsApidatSource:SheetsApidatSource){
趣味阅读电子表格(电子表格ID:String,
电子表格范围:字符串):单个{
返回sheetsAPIDataSource.readSpreadSheet(电子表格ID,电子表格范围)
}
}
覆盖电子表格(电子表格ID:String,
电子表格范围:字符串):单个{
可观测回波
.fromCallable{
Log.d(“电子表格阅读”,“开始!”)
val响应=sheetsAPI.spreadsheets()
.values()
.get(电子表格ID、电子表格范围)
.execute()
response.getValues()
}.map{it[0].zip(it[1])}.flatMapIterable{it->it}
托利斯先生()
}
response.getValues()方法返回什么?根据文档,这将返回一个列表java.util.ListSo您确定这里有数据吗。map{it[0].zip(it[1])}.flatMapIterable{it->it}?我想是的。我使用的测试数据包含两列和相同数量的行。请在该行前后添加数据记录。使用doOnNext
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()
}