2017-04-10 25 views
1

我的代碼中有兩個可觀察對象。第一個是搜索按鈕點擊和文本更改的合併觀察。如何在rxjava2中鏈接observables

Observable<String> buttonClickStream = createButtonClickObservable(); 
Observable<String> textChangeStream = createTextChangeObservable(); 
Observable<String> searchTextObservable 
    =Observable.merge(buttonClickStream,textChangeStream); 

disposable = searchTextObservable 
    .observeOn(AndroidSchedulers.mainThread()) 
    .doOnNext(s -> showProgressBar()) 
    .observeOn(Schedulers.io()) 
    .map(this::getStarredRepos) 
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(gitHubRepos -> { 
     hideProgressBar(); 
     showResults(gitHubRepos); 
    }); 

第二可觀察到的是用於獲取從服務器響應:

private List<GitHubRepo> getStarredRepos(String username) { 
    RestInterface restService=RestService 
     .getClient().create(RestInterface.class); 
    restService.getStarredRepos(username) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribeOn(Schedulers.io()) 
     .subscribe(this::handleResponse, this::handleError); 

    return repoList; 
} 

現在的問題是,hideProgressBar()和showResults()方法用handleResponse之前正在執行()結束。

我是新來RxJava,所以如果有什麼錯誤代碼,請糾正。

回答

1

List<GitHubRepo> getStarredRepos(...)應改爲Observable<List<GitHubRepo>> getStarredRepos(...)。不要訂閱此方法中的observable,但返回從restService獲得的可觀察值(如果需要處理響應,請在返回前輸入map(),因爲錯誤您可以使用onErrorReturn()或您需要的東西)。

然後,而不是.map(this::getStarredRepos).switchMap(this::getStarredRepos)

+0

謝謝..它的工作原理 – Yogesh

相關問題