2017-04-04 51 views
0

我在ViewRxBinding2,看起來像下面:2網絡RxBinding2調用鏈 - SearchViewQueryText

@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(...)

我錯過了什麼?

回答

0

mInteractor.searchDiscogs(searchViewQueryTextEvent.toString())

應該已經

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