0

私は以下のようなものを持っRxBinding2ています:View

@Override
public Observable<SearchViewQueryTextEvent> searchIntent()
{
    return RxSearchView.queryTextChangeEvents(searchView)
            .debounce(500, java.util.concurrent.TimeUnit.MILLISECONDS)
            .filter(searchViewQueryTextEvent -> searchViewQueryTextEvent.queryText().length() > 2);
}

続いて呼び出したいメソッドは次のようになります。

return discogsService.getSearchResults(searchTerm, mContext.getString(R.string.token))
                .subscribeOn(Schedulers.io())
                .flatMapIterable(RootSearchResponse::getSearchResults)
                .observeOn(Schedulers.io())
                .flatMap(searchResult ->
                {
                    if (searchResult.getType().equals("release"))
                    {
                        Log.e("DiscogsInteractor", "In release");
                        return discogsService.getRelease(searchResult.getId(), mContext.getString(R.string.token));
                    }
                    else if (searchResult.getType().equals("artist"))
                    {
                        Log.e("DiscogsInteractor", "In artist");
                        return discogsService.getArtist(searchResult.getId(), mContext.getString(R.string.token));
                    }
                    Log.e("DiscogsInteractor", "EmptyObject");
                    return new EmptyObject();
                });

Presenterメソッドを反応的に呼び出すように、これを設定したいと思います。プレゼンターで以下を単独で呼び出すと、正常に動作します。

mInteractor.searchDiscogs(searchQuery)
    .subscribe(o -> Log.e(TAG, o.toString()));

RxBindingただし、それをリンクして、上記のメソッドを の入力で呼び出すのに苦労していSearchViewます。これが私が試したことです:

CompositeDisposable disposable = new CompositeDisposable();

disposable.add(mView.searchIntent()
            .subscribeWith(new DisposableObserver<SearchViewQueryTextEvent>()
            {
                @Override
                public void onNext(SearchViewQueryTextEvent searchViewQueryTextEvent)
                {
                    mInteractor.searchDiscogs(searchViewQueryTextEvent.toString()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Object>()
                    {
                        @Override
                        public void onSubscribe(Disposable d)
                        {
                            Log.e(TAG, "test"); <--- ObservableObserveOn
                        }

                        ...

                        @Override
                        public void onComplete()
                        {
                            Log.e(TAG, "test");
                        }
                    });
                }

                ...

onNext()正しく呼び出されますが、それに渡すsearchDiscogs(...)と、行まで実行されます (ただし、内部ではありません.flatMap(...)) 。ObservableObserveOnonSubscribe(...)

私は何が欠けていますか?

4

1 に答える 1