【问题标题】:RxJava - Use flowables async wayRxJava - 使用 flowables 异步方式
【发布时间】:2018-10-31 14:33:30
【问题描述】:

重新编辑:我将使用此方法的结果来初始化视图中某些按钮的可见性 接受的答案在理论上似乎不错,但第一种方法的返回值是 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。在使用 observables 时,我可以创建一个订阅对象并调用它的方法,但我不知道如何使用 flowables 正确地做到这一点。

我的困惑如下:sdk 方法返回一个Flowable&lt;List&lt;Contact&gt;&gt;&gt; 但我认为我需要检查一个联系人是否只存在一次并停止

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

【问题讨论】:

    标签: android rx-java rx-java2


    【解决方案1】:

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

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

    【讨论】:

    • 几个问题 - 1)这是否等待 searchContact 搜索一次。 2)我应该什么时候取消订阅,还是在某个时间点后它会自行取消?我无法在 onComplete 取消订阅,因为它会警告我订阅的初始化
    • 其他地方可以取消,doesExist方法不行
    • 那我怎样才能让它等待呢?在之前的构造中,我使用了blockingSubscribe 来观察可观察对象。顺便说一句,这一班轮似乎更好,更容易理解。我会接受它作为正确答案
    • 搜索后进行其他操作
    • 你可以贴更多代码,我不知道你在搜索结果后想做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    相关资源
    最近更新 更多