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