我有一個搜索欄(一個EditText
)下面有四個標籤(每個標籤應顯示不同的結果)。我使用RxJava和RxBinding來監聽和響應文本更改事件,並且我使用switchMap()運算符爲每個文本更改排放執行Retrofit服務。如何在RxJava的switchMap()運算符中執行不同的改造請求?
由於用戶可以選擇四個選項卡中的任何一個,我實際上對該選項卡執行相應的Retrofit
請求。 對於這些Retrofit
服務中的每一個,我都收到不同的響應對象。
如何處理switchMap()
中的不同返回類型,因爲最後一個需要所有類型的公共類型?
我已經問過類似的question,但它的工作原理並不能讓我使用我的訂戶的數據。或者我的方法從一開始就錯了,我應該嘗試一種不同的方法?
代碼:
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())
.switchMap(new Func1<TextViewTextChangeEvent, Observable<Void>>() {
@Override
public Observable<Void> call(TextViewTextChangeEvent textViewTextChangeEvent) {
String searchBarText = textViewTextChangeEvent.text().toString();
switch (visibleTab) {
case TAGS:
presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0));
case PEOPLE:
return presenter.executeSearchPostsByPeople(searchBarText, String.valueOf(0));
case COMPANIES:
return presenter.executeSearchPostsByCompanies(searchBarText, String.valueOf(0));
case JOBS:
return presenter.executeSearchPostsByJobs(searchBarText, String.valueOf(0));
default:
return presenter.executeSearchPostsByTag(searchBarText, String.valueOf(0));
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Void>() {
@Override
public void onCompleted() {
Timber.i("ON COMPLETED");
}
@Override
public void onError(Throwable e) {
Timber.i("ON ERROR e : %s", e.getMessage());
}
@Override
public void onNext(Void aVoid) {
Timber.i("ON NEXT");
}
});
在上面的代碼中你會看到我的可觀收益型但不工作我只是說,這樣你會看到我在做什麼。