android - 类型不匹配返回带有 fromCallable 的 observable
问题描述
以下代码无法编译:
override fun storeConnections(connections: List<Connection>): Observable<List<Connection>> =
Observable.fromCallable<List<Connection>> {
appDao.storeConnections(connections.map {
mapper.toDb(it)})
}
带有 appDao.storeConnections 的行表示以下错误:
必填清单!
找到单位
storeConnections 是使用 Room 完成的:
@Dao
interface RoomDao {
@Insert(onConflict = REPLACE)
fun storeConnections(linkedInConnection: List<LinkedInConnectionEntity>)
}
storeConnections 是从我的 rx 流中调用的:
val startPositions = BehaviorSubject.createDefault(0)
startPositions.flatMap { startPos -> App.context.repository.getConnections(startPos) }
.flatMap { connections -> Observable.fromCallable(App.context.repository.storeConnections(connections)) }
.doOnNext { ind -> startPositions.onNext(ind + 1) }
.subscribe({ ind -> println("Index $ind") })
我如何正确地实现这个 fromCallable?
解决方案
鉴于您对问题的回答:
storeConnections 没有返回任何内容。但是我需要将它包装在一个 observable 中以便将它推到流中。所以也许我的问题是当 API 调用什么都不返回时,如何用 Observable 包装 API 调用。
我将回答您如何将其包装在可观察对象中以便将其推送到流中:
.flatMap {
connections ->
App.context.repository.storeConnections(connections)
.andThen(Observable.just(connections))
}
鉴于 storeConnections 返回一个 Completable:
override fun storeConnections(connections: List<Connection>): Completable =
Completable.fromAction {
appDao.storeConnections(connections.map { mapper.toDb(it) } )
}
}
如果 storeConnections 返回“无”,您可以简单地将 Completable.fromAction 移动到您的流中:
.flatMap {
connections ->
Completable.fromAction { App.context.repository.storeConnections(connections) }
.andThen(Observable.just(connections))
}
推荐阅读
- excel - Excel Addin 未执行调用函数
- javascript - 为什么这个简单的 PHP 文件没有 CORS 工作?
- python - 使用 Pillow 改变色调
- python - 仅当出现 k 次时才按列屏蔽值范围
- vue.js - VSCode 显示与 Vue CLI 构建不同的错误
- python - 如何使用python将具有相似值的不同行操作到列中
- javascript - ES 模块和 jsconfig.json:错误 [ERR_MODULE_NOT_FOUND]
- html - 图像网格悬停
- scikit-learn - 在 R-Studio 中通过网状导入 sklearn 时出错
- google-cloud-storage - 谷歌云存储签名 URL 不创建零长度文件