1
我開始在我現有的應用程序中使用RxAndroid。我已經開始了一個非常簡單的活動,我有一個搜索字段,並在文本更改時使用Retrofit聯繫API。我還想在開始新的請求之前取消當前未完成的請求。這是我到目前爲止:改進請求取消RxJava
private Subscription currentRequestSubscription = null;
// Create stream of filtered queries
Observable<String> queryObservable = RxTextView.textChanges(searchView)
.startWith("")
.debounce(DELAY_BEFORE_REQUEST, TimeUnit.MILLISECONDS)
.map(new Func1<CharSequence, String>() {
@Override
public String call(CharSequence charSequence) {
return charSequence.toString();
}
})
// Make search request and update UI
queryObservable.observeOn(Schedulers.io())
.subscribe(new Action1<String>() {
@Override
public void call(String query) {
if (currentRequestSubscription != null) {
currentRequestSubscription.unsubscribe();
}
currentRequestSubscription = createAPIRequestObservable(query)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(... update UI with results ...);
}
});
我覺得像存儲訂閱是不是真正的反應式編程兼容。我怎樣才能以更標準的方式來做到這一點?
謝謝,那就是我一直在尋找的! –
這會導致崩潰,如果API請求需要長時間(低連接)並且在完成之前觸發新請求。我仍然java.io.InterruptedIOException:線程中斷。 – Bresiu