0

I have an RxBinding2 in my View that looks like the below:

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

The method I want to call subsequently looks like this:

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();
                });

I want to set this up in my Presenter so that it will reactively call a method. When I call the below on its own in my Presenter, it works fine:

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

However, I'm struggling to link up that RxBinding to then call the above method with the input in the SearchView. Here's what I've tried:

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() gets called correctly but when passing into searchDiscogs(...) it will execute up to the line (but not inside of) .flatMap(...) and will then return ObservableObserveOn to the onSubscribe(...).

What am I missing?

Josh Laird
  • 6,974
  • 7
  • 38
  • 69

1 Answers1

0

mInteractor.searchDiscogs(searchViewQueryTextEvent.toString())

should have been

mInteractor.searchDiscogs(searchViewQueryTextEvent.queryText().toString())

Josh Laird
  • 6,974
  • 7
  • 38
  • 69