RxJava 处理请求嵌套-- flatMap、Map

本文介绍了如何使用RxJava处理嵌套请求,通过flatMap和map操作符来简化异步网络请求。讲解了flatMap如何将多级数列线性化,以及与map的区别。同时,提到了RxJava与Retrofit结合使用的优势,强调在处理嵌套请求时,flatMap更适合处理异步流程并提供更好的错误处理机制。
摘要由CSDN通过智能技术生成

原文地址:http://www.cnblogs.com/soaringEveryday/p/5548633.html

用RxJava处理嵌套请求

互联网应用开发中由于请求网络数据频繁,往往后面一个请求的参数是前面一个请求的结果,于是经常需要在前面一个请求的响应中去发送第二个请求,从而造成“请求嵌套”的问题。如果层次比较多,代码可读性和效率都是问题。本文首先从感性上介绍下RxJava,然后讲解如何通过RxJava中的flatMap操作符来处理“嵌套请求”的问题

内容提要

  • RxJava简单介绍
  • 嵌套请求举例
  • 运用flatMap
  • map和flatMap
  • RxJava与Retrofit配合解决嵌套请求

RxJava简单介绍

这里并不打算详细介绍RxJava的用法和原理,这方面的文章已经很多了。这里仅仅阐述本人对于RxJava的感性上的理解。先上一个图:
Rxjava overview

我们都知道RxJava是基于观察者模式的,但是和传统的观察者模式又有很大的区别。传统的观察者模式更注重订阅和发布这个动作,而RxJava的重点在于数据的“流动”。
如果我们把RxJava中的Observable看做一个盒子,那么Observable就是把数据或者事件给装进了这个易于拿取的盒子里面,让订阅者(或者下一级别的盒子)可以拿到而处理。这样一来,原来静态的数据/事件就被流动起来了。

我们知道人类会在河流中建设大坝,其实我们可以把RxJava中的filter/map/merge等Oberservable操作符看做成数据流中的大坝,经过这个操作符的操作后,大坝数据流被过滤被合并被处理,从而灵活的对数据的流动进行管制,让最终的使用者灵活的拿到。

以上就是我对RxJava的理解,深入的用法和原理大家请自行看网上的文章。
嵌套请求举例

这里开始进入正题,开始举一个嵌套请求的例子。
比如我们下列接口:

  • api/students/getAll (传入班级的id获得班级的学生数组,返回值是list)
  • api/courses/getAll (传入Student的id获得这个学生所上的课程,返回值是List)

我们最终的目的是要打印班上所有同学分别所上的课程(大学,同班级每个学生选上的课不一样),按照传统Volley的做法,代码大概是这样子(Volley已经被封装过)

private void getAllStudents(String id) {
        BaseRequest baseRequest = new BaseRequest();
        baseRequest.setClassId(id);
        String url = AppConfig.SERVER_URL + "api/students/getAll";

        final GsonRequest request = new GsonRequest<>(url, baseRequest, Response.class, new Response.Listener<Response>() {
            @Override
            public void onResponse(Response response) {
                if (response.getStatus() > 0) {
                    List<Student> studentList = response.getData();
                    for (Student student : studentList) {

                    }
                } else {
                    //error
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值