を、私は以下のように見える私のView
でRxBinding2
ありますRxBinding2チェーンは、呼び出し - SearchViewQueryText
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:
@Override
public Observable<SearchViewQueryTextEvent> searchIntent()
{
return RxSearchView.queryTextChangeEvents(searchView)
.debounce(500, java.util.concurrent.TimeUnit.MILLISECONDS)
.filter(searchViewQueryTextEvent -> searchViewQueryTextEvent.queryText().length() > 2);
}
私はその後、呼び出したいメソッドを次のようになりますこれを私の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(...)
(ただし、内部の)ラインまで実行され、その後、onSubscribe(...)
にObservableObserveOn
を返します。
私には何が欠けていますか?