その下に 4 つのタブがある searchBar ( EditText
) があります (各タブには異なる結果が表示されるはずです)。RxBinding で RxJava を使用して、テキスト変更イベントをリッスンして反応させています。また、switchMap() 演算子を使用して、テキスト変更の発行ごとに Retrofit サービスを実行しています。
ユーザーは 4 つのタブのいずれかを選択できるため、実際にはRetrofit
そのタブに対応するリクエストを実行します。これらのRetrofit
サービスごとに、異なる応答オブジェクトを受け取ります。
switchMap()
最後のものはすべてに共通の型が必要なので、内部で異なる戻り値の型を処理するにはどうすればよいですか?
以前にも同様の質問をしましたが、機能している間の回答では、サブスクライバーからのデータを消費できません。それとも、最初から私のアプローチが間違っているので、別のアプローチを試す必要がありますか?
コード :
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");
}
});
上記のコードでは、Observable の戻り値の型があることがわかりますが、それは機能しません。追加したばかりなので、何をしているのかがわかります。