我有一个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
)