У меня есть EditText
, где пользователь вводит поисковый запрос, и я хочу выполнять мгновенный поиск на моем сервере, когда пользователь что-то вводит.
Я пытаюсь сделать это с RxJava
следующим образом:
RxTextView.textChanges(editQuery) // I'm using RxBinding for listening to text changes
.flatMap(new Func1<CharSequence, Observable<UserPublic[]>>() {
@Override
public Observable<UserPublic[]> call(CharSequence query) {
return api.searchUsers(query); // I'm using Retrofit 1.9 for network calls. searchUsers returns an Observable<UserPublic[]>
}
})
.subscribe(Observers.create(
new Action1<UserPublic[]>() {
@Override
public void call(UserPublic[] userPublics) {
processResult(userPublics);
}
})
, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
processError(throwable);
}
});
проблема в том, что если сетевой вызов обнаруживает ошибку, все наблюдаемое останавливается. Поэтому, когда пользователь продолжает печатать, ничего не происходит.
Как я могу изменить этот код так, чтобы:
- Когда возникает проблема с сетью, вызывается
processError
- Но когда пользователь продолжает набирать текст, продолжают поступать новые сетевые вызовы (что снова приводит к
processResult
/processError
).