具有 2 个网络调用的 RxBinding2 链 - SearchViewQueryText

RxBinding2 Chain with 2 Network Calls - SearchViewQueryText

我的 View 中有一个 RxBinding2,如下所示:

@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 中进行设置,以便它可以响应地调用一个方法。当我在 Presenter 中单独调用以下内容时,它工作正常:

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

但是,我正在努力 link 提高 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(...) 然后 return ObservableObserveOnonSubscribe(...).

我错过了什么?

mInteractor.searchDiscogs(searchViewQueryTextEvent.toString())

应该是

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