RxAndroid响应一个呼叫以发出另一个请求 [英] RxAndroid response of one call to make another request

查看:141
本文介绍了RxAndroid响应一个呼叫以发出另一个请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆