Я разрабатываю приложение для 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 должен отменить предыдущий запрос, но это не«т.