1

その下に 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 の戻り値の型があることがわかりますが、それは機能しません。追加したばかりなので、何をしているのかがわかります。

4

1 に答える 1