gpt4 book ai didi

android - 如何在 rxjava2 中链接可观察对象

转载 作者:行者123 更新时间:2023-11-30 00:36:35 25 4
gpt4 key购买 nike

我的代码中有两个可观察对象。第一个是用于搜索按钮点击和文本更改的合并可观察对象。

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的新手,所以如果代码有任何错误,请指正。

最佳答案

你的 List<GitHubRepo> getStarredRepos(...)应该改为 Observable<List<GitHubRepo>> getStarredRepos(...) .不要订阅这个方法内部的可观察对象,而是返回你从 restService 得到的可观察对象(如果你需要处理响应,在返回前放一个 map(),对于错误你可以使用 onErrorReturn() 或你需要的东西) .

然后代替 .map(this::getStarredRepos).switchMap(this::getStarredRepos) .

关于android - 如何在 rxjava2 中链接可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43321832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com