重新编辑:我将使用此方法的结果来初始化视图中某些按钮的可见性 从理论上讲,可接受的答案似乎不错,但是第一种方法的返回值是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。在使用可观察对象时,我可以创建一个预订对象并调用它的方法,但是我无法弄清楚如何使用flowables来正确实现它。
我的困惑如下:sdk方法返回一个Flowable<List<Contact>>>
,但我认为我需要检查一次联系人是否存在并停止
现在我的方法没有进入onError,onNext或onComplete。它只是返回dosExist
答案 0 :(得分:1)
我重新编辑我的答案,下面是您需要的返回类型。
fun doesExist(): Flowable<Single<Boolean>> {
return Flowable.just(Single.just(SDK.searchContact("contact")).map{ it.isEmpty()})
}