我正在使用RxSearchView
來將API搜索結果發送到recyclerview。但是,如果其中一個查詢失敗,則調用onError()
(這是預期的),但訂閱作爲整體也會被取消。後續查詢根本不執行。RxJava:即使發生錯誤,也繼續下一次迭代
我該如何修改代碼,以便在查詢失敗並且下一個傳入查詢正常執行時阻止對onError()
的調用?
這裏有一個代碼片段:
subscription = RxSearchView.queryTextChanges(searchView)
.debounce(500, MILLISECONDS)
.filter(charSequence -> !TextUtils.isEmpty(charSequence))
.map(CharSequence::toString)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io())
.switchMap(query -> apiService.getSearchResults(query))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<SearchResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(SearchResponse searchResponse) {
if (searchResponse.getStatus().equals("OK")) {
//update Adapter
} else {
//update error views
}
}
});
P.S:我使用switchMap()
讓老查詢的結果會被忽略,如果新的查詢結果已經到來。
您只需將必要的錯誤處理邏輯(https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators)連線到apiService.getSearchResults(query)調用。 – nikis