RxAndroid响应一个呼叫以发出另一个请求 [英] RxAndroid response of one call to make another request
问题描述
我是RxAndroid的新手,正在尝试链接响应.
I'm new to RxAndroid and trying to chain responses.
我正在使用此 github API来检索数据.与每个问题一起,还有与之相关的评论链接和事件链接,我想获取这些评论链接和事件列表以及事件列表来更新现有对象,以形成这样的内容.
I'm using this github API to retrieve data. Along with each issue there are comments link and events link associated with it which I want to fetch and update existing object with list of comments and events to form something like this.
[
issue: {
comments: [
{
.
.
},
{
.
.
}
]
events : [
{
.
.
},
{
.
.
}
]
]
]
我可以使用以下代码检索初始响应
I could retrieve initial response with following code
GitHubService gitHubService = ServiceFactory.createServiceFrom(GitHubService.class, GitHubService.ENDPOINT);
gitHubService.getIssuesList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(issues -> Arrays.asList(issues))
.subscribe(adapter::add);
现在如何在更新适配器之前检索注释和事件?我也想显示3条评论和3个事件.
Now How do I retrieve comments and events before updating adapter ? I want to show 3 comments and 3 events as well.
推荐答案
感谢@Riccardo Ciovati的示例!
Thanks to @Riccardo Ciovati for your example !
这是我的解决方案.而且效果很好!
Here is my solution. and it works perfectly !
public static void getIssuesForRepo(final IssuesListAdapter adapter) {
GitHubService gitHubService = ServiceFactory.createServiceFrom(GitHubService.class, GitHubService.ENDPOINT);
gitHubService.getIssuesList()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(issues -> Arrays.asList(issues))
.flatMap(issues -> Observable.from(issues))
.filter(issue -> issue.getCommentsUrl() != null)
.flatMap(new Func1<Issue, Observable<Issue>>() {
@Override
public Observable<Issue> call(Issue issue) {
return gitHubService.getComments(issue.getNumber())
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.map(comments -> {
issue.setCommentList(Arrays.asList(comments));
return issue;
});
}
})
.toList()
.subscribe(adapter::add);
}
其中
public interface GitHubService {
String ENDPOINT = "https://api.github.com/";
@GET("repos/crashlytics/secureudid/issues")
Observable<Issue[]> getIssuesList();
@GET("repos/crashlytics/secureudid/issues/{number}/comments")
Observable<Comment[]> getComments(@Path("number") long number);
}
这篇关于RxAndroid响应一个呼叫以发出另一个请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!