0

我有一个如下所示的内容RxBinding2View

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

我想在 my 中进行设置,Presenter以便它反应性地调用一个方法。当我在我的 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

0

mInteractor.searchDiscogs(searchViewQueryTextEvent.toString())

本来应该

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

于 2017-04-05T10:45:39.607 回答