RxJava-使用flowables异步方式

时间:2018-10-31 14:33:30

标签: android rx-java rx-java2

重新编辑:我将使用此方法的结果来初始化视图中某些按钮的可见性    从理论上讲,可接受的答案似乎不错,但是第一种方法的返回值是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

1 个答案:

答案 0 :(得分:1)

我重新编辑我的答案,下面是您需要的返回类型。

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