我的代码中有两个observable。第一个是合并的observable,用于搜索按钮单击和文本更改。
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);
});
第二个observable用于从服务器获取响应。:
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的新手,所以如果代码中有任何错误,请纠正。
答案 0 :(得分:1)
您的List<GitHubRepo> getStarredRepos(...)
应该是Observable<List<GitHubRepo>> getStarredRepos(...)
。不要订阅此方法内部的observable,但返回从restService获取的observable(如果需要处理响应,请在返回之前放置map()
,对于可以使用的错误{{1}或者你需要的东西)。
然后代替onErrorReturn()
做.map(this::getStarredRepos)
。