RxJava-使用可流动的异步方式



重新编辑:我将使用此方法的结果来初始化视图中某些按钮的可见性理论上公认的答案似乎不错,但第一个方法的返回值是Flowable>而不是Flowable。因此,我不能将其作为参数传递给订阅,因为它需要Flowable,但它是Flowable>

编辑前的问题

我使用RxJava来观察一个需要从SDK调用的方法。使用这种方法,我试图断言某个东西的存在,但我不知道调用需要多长时间,所以我很难说在x秒后终止订阅。

override fun doesExist(): Boolean {
var doesExist = false
var subscription : Subscription
val flowable = Flowable.just(SDK.searchContact("contact"))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : FlowableSubscriber<Flowable<List<Contact>>> {
override fun onSubscribe(s: Subscription) {
subscription = s
}
override fun onNext(t: Flowable<List<Contact>>?) {
doesExist = true
}
override fun onComplete() {
Log.d("tagtagcomplete", "tagtagcomplete")
}
override fun onError(e: Throwable?) {
Log.d("tagtagerror", "tagtagerror")
}

return doesExist
}

所以我想做的是,如果我没有从searchContract方法中得到任何结果,就返回true,如果我得到了结果,则返回false。在使用可观察性时,我可以创建一个订阅对象并调用它的方法,但我不知道如何用可流动性正确地完成这项工作。

我的困惑如下:方法到sdk返回一个Flowable<List<Contact>>>,但在我看来,我需要检查联系人是否只存在一次并停止

现在,我的方法没有进入onError、onNext或onComplete内部。它只是返回doesExist

我重新编写了我的答案,您需要以下返回类型。

fun doesExist(): Flowable<Single<Boolean>> {
return Flowable.just(Single.just(SDK.searchContact("contact")).map{ it.isEmpty()})
}

最新更新