如何将Flowable转换为Single?或者,如果还有另一种方法可以让它在第一个感兴趣的响应之后停止发光。
我试过这个,但它似乎不起作用:
disposables.add(
repository.getAllSomethings()
.subscribeOn(SchedulerProvider.getInstance().computation())
.observeOn(SchedulerProvider.getInstance().ui())
.toSingle()
.subscribeWith(object : DisposableSingleObserver<List<Something>>() {
override fun onSuccess(t: List<Something>) {
}
override fun onError(e: Throwable) {
}
})
getAllSomethings()返回Flowable<List<Something>>
在上面的代码.subscribeWith()
中用红色加下划线表示:
Type parameter bound for E in
fun <E : SingleObserver<in Flowable<List<Something>!>!>!> subscribeWith(observer: E!): E!
is not satisfied: inferred type ! is not a subtype of SingleObserver<in Flowable<List<Something>!>!>!
答案 0 :(得分:15)
好的,感谢@akarnokd我在评论中找到了答案。
教我如何钓鱼,而不是给我他建议在这里看到的直接答案:http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html(我本来应该做的第一个!)。
在那里我发现LIMIT 1
解决了我的问题。
即使我从firstOrError()
调用的对象是Flowable,IDE也没有抱怨。然而,看看上面的链接,toSingle()
甚至不是一个有效的选项!
答案 1 :(得分:0)
就我而言,我实际上有一个 Flowable 并且想要它的好处(即背压),但我仍然想返回一个 Single
,例如Single<List<String>>
。就我而言,我使用的是 Android WorkManager 的 RxWorker
,它希望我的函数返回 Single<Result>
,而不是 Flowable。
在这种情况下,
val flowable = Flowable.just("my flowable")
return flowable.toList() // type: Single<List<String>>
或者如果你想返回一个特定的值,因为你不关心可流动的输出:
return flowable.toList().map {} // returns unit
return flowable.toList().map { "Hello" } // returns String
return flowable.toList().map { Result.success() } // returns Result