В настоящее время у меня есть EditText
для пользователя, чтобы войти в поиск. Я пытаюсь использовать RxJava с debounce
для поиска только так часто, вместо каждого символа. Тем не менее, я получаю InterruptedIOException
во время тестирования, что убивает поток.
private val subject = BehaviorSubject.create<String>()
init {
configureAutoComplete()
}
private fun configureAutoComplete() {
subject.debounce(200, TimeUnit.MILLISECONDS)
.flatMap {
getSearchResults(query = it)
}
.subscribe({ result ->
handleResult(result)
}, { t: Throwable? ->
Logger.e(t, "Failed to search")
})
}
fun getSearchResults(query: String): Observable<List<MyObject>> {
val service = NetworkService.create() // get retrofit service
return service.search(query)
}
fun search(text: String) {
subject.onNext(text)
}
Как видите, я создаю BehaviorSubject
, а в init
я устанавливаю его с debounce
.
getSearchResult
возвращает Observable
и выполняет мой сетевой запрос.
Но когда я тестирую, если я печатаю с определенной скоростью (обычно быстро, например, набирая другой символ во время выполнения запроса), он выдаст Exception
.
Failed to search : java.io.InterruptedIOException
at okhttp3.internal.http2.Http2Stream.waitForIo(Http2Stream.java:579)
at okhttp3.internal.http2.Http2Stream.takeResponseHeaders(Http2Stream.java:143)
at okhttp3.internal.http2.Http2Codec.readResponseHeaders(Http2Codec.java:125)
Я смотрел на это, https://stackoverflow.com/a/47276430/3106174, и похоже, что я все делаю правильно.