如何在rxjava2中链接observables
问题描述:
我的代码中有两个可观察对象。第一个是搜索按钮点击和文本更改的合并观察。如何在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,所以如果有什么错误代码,请纠正。
答
你List<GitHubRepo> getStarredRepos(...)
应改为Observable<List<GitHubRepo>> getStarredRepos(...)
。不要订阅此方法中的observable,但返回从restService获得的可观察值(如果需要处理响应,请在返回前输入map()
,因为错误您可以使用onErrorReturn()
或您需要的东西)。
然后,而不是.map(this::getStarredRepos)
做.switchMap(this::getStarredRepos)
。
谢谢..它的工作原理 – Yogesh