RxJava - использовать переменные в асинхронном режиме - PullRequest
0 голосов
/ 31 октября 2018

Повторное редактирование: я буду использовать результат этого метода для инициализации видимости некоторых кнопок в моем представлении Принятый ответ кажется хорошим в теории, но возвращаемое значение первого метода - 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
    }

Итак, я хочу вернуть true, если я не получу никакого результата из метода searchContract, и вернуть false, если я получу результат. Используя observables, я могу создать объект подписки и вызвать его методы, но я не мог понять, как сделать это правильно с помощью flowables.

Моя путаница заключается в следующем: метод для sdk возвращает Flowable<List<Contact>>>, но, по моему мнению, мне нужно проверить, существует ли контакт только один раз, и остановить

Прямо сейчас мой метод не идет внутри onError, onNext или onComplete. Он просто возвращает IsExist

1 Ответ

0 голосов
/ 31 октября 2018

Я переосмыслил свой ответ, вам нужен следующий тип возврата.

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