以下代码无法编译:
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>)
}
从我的rx流中调用storeConnections:
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?
答案 0 :(得分:0)
回答您的问题:
storeConnections不返回任何内容。但是我需要将其包装在一个可观察的物体中,以便将其推向下游。所以也许我的问题是,当该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返回“ nothing”,则只需将Completable.fromAction移动到流中即可。
.flatMap {
connections ->
Completable.fromAction { App.context.repository.storeConnections(connections) }
.andThen(Observable.just(connections))
}
答案 1 :(得分:-1)
使其正常工作的关键是使用以下方法:
return@fromCallable connections
这是正确的代码:
override fun storeConnections(connections: List<Connection>): Observable<List<Connection>> =
Observable.fromCallable<List<Connection>> {
appDao.storeConnections(connections.map {
mapper.toDb(it)
})
return@fromCallable connections
}
以及调用它的rx流:
val startPositions = BehaviorSubject.createDefault(0)
startPositions.flatMap { startPos -> App.context.repository.getConnections(startPos) }
.flatMap {
connections -> App.context.repository.storeConnections(connections)
}
.doOnNext {
connections -> startPositions.onNext(startPos++)
}
.subscribe({ ind -> println("Index $ind") })