【发布时间】:2017-02-10 13:34:42
【问题描述】:
我是RxJava 的新手,我只是尝试实现一些示例以更好地理解发生了什么,所以我认为EditText 是一个可观察的并使用RxBinding 发出textChangeEvents图书馆:
RxTextView.textChangeEvents(searchbar.getEditText())
.debounce(400, TimeUnit.MILLISECONDS)
.filter(new Func1<TextViewTextChangeEvent, Boolean>() {
@Override
public Boolean call(TextViewTextChangeEvent text) {
return (text.text().length() > 2);
}
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io());
还有一个Retrofit api 调用,其中调用的文本来自上面的Observable。
所以我已经声明了一个函数:
@Override
public Observable<SearchResponse> executeSearch(Observable<RxTextView> queryText) {
return searchService.getSearch(queryText)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread());
}
现在我必须将这两者结合起来,所以当文本更改时,会有一个新的Retrofit 调用,但我不知道如何将queryText“传递”给服务。
我也试过了:
Observable<TextViewTextChangeEvent>
searchBarText = RxTextView.textChangeEvents(searchbar.getEditText())
.debounce(400, TimeUnit.MILLISECONDS)
.filter(new Func1<TextViewTextChangeEvent, Boolean>() {
@Override
public Boolean call(TextViewTextChangeEvent text) {
Timber.i("Executes!!! text : %s", text.text().toString());
return (text.text().length() > 2);
}
})
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(Schedulers.io());
Observable.combineLatest(executeSearchTypeOne(searchBarText), executeSearchTypeTwo(searchBarText),
new Func2<TypeOne, TypeTwo, Object>() {
@Override
public Object call(TypeOne one, TypeTwo two) {
return null;
}
})
.subscribe(new Action1<Object>() {
@Override
public void call(Object o) {
Timber.i("WORKS!!!");
}
});
我想根据EditText 更改同时运行两个Retrofit 调用,但它们根本不运行
【问题讨论】:
标签: android rx-java rx-android