RxJava switchMap не отменяет предыдущий запрос - PullRequest
0 голосов
/ 27 декабря 2018

Я разрабатываю приложение для Android с использованием Kotlin, OkHttp, RxJava2.

Я пытаюсь выполнить автоматический поиск.

Когда пользователь вводит символ, ищет его.

override fun search(subject: PublishSubject<String>) {
    disposable.add(
            subject.debounce(1000, TimeUnit.MILLISECONDS)
                    .filter { it.isNotEmpty() }
                    .distinctUntilChanged()
                    .switchMap { keyword ->
                        search(keyword)
                    }
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe({ response ->
                        // using the response
                    }, {
                        it.printStackTrace()
                    })
    )
}

И функция поиска:

    fun search(keyword: String): Observable<String> {
        val request = Request.Builder()
            .url(url)
            .post(RequestBody.create(contentType, xmlBody(keyword)))
            .build()

        return Observable.fromCallable {
            val response = OkHttpClient().newCall(request).execute()
            response.body()?.string()
        }
    }

Мне нравится "Retrofit", но в моем случае я должен использовать XML.Я пытался использовать Retrofit с SimpleXMLConverter, но он не подходит для этого проекта.Поэтому я использую "OkHttp".Но верхний код выдает «InterruptedIOException».

Первый вызов в порядке.Но исключение возникает, когда следующий запрос поиска получен во время обработки первого запроса.

Как мне это исправить?

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

...