2017-04-10 27 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

相关问题