30秒上手新一代Http请求神器RxHttp

开胃菜

话不多说,30s倒计时开始,先来看看如何发送一个Get请求,如下:

RxHttp.get("http://...")  //第一步,确定请求类型,可以选择postForm、postJson等方法 
    .asString()           //第二步,确定返回类型,这里返回String类型 
    .subscribe(s -> {     //第三步,订阅观察者,第二步返回Observable对象
        //请求成功 
    }, throwable -> {                                  
        //请求失败 
    }); 

Ok,倒计时结束!!! 到这,你已经学会了RxHttp的精髓。

是的,不用怀疑,就是这么简单,使用RxHttp,任意请求,任意返回数据类型,都遵循这三个步骤,我们称之为请求三部曲,如下:

重要事情说3遍

任意请求,任意返回数据类型,皆遵循请求三部曲

任意请求,任意返回数据类型,皆遵循请求三部曲

任意请求,任意返回数据类型,皆遵循请求三部曲

gradle依赖

  • OkHttp 3.14.x以上版本, 最低要求为API 21,如你想要兼容21以下,请依赖OkHttp 3.12.x,该版本最低要求 API 9

  • asXxx方法内部是通过RxJava实现的,而RxHttp 2.2.0版本起,内部已剔除RxJava,如需使用,请自行依赖RxJava并告知RxHttp依赖的Rxjava版本

1、必选

jitpack添加到项目的build.gradle文件中,如下:

allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
} 

注:RxHttp 2.6.0版本起,已全面从JCenter迁移至jitpack

//使用kapt依赖rxhttp-compiler时必须
apply plugin: 'kotlin-kapt'

android {
    //必须,java 8或更高
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation 'com.github.liujingxing.rxhttp:rxhttp:2.6.0'
    implementation 'com.squareup.okhttp3:okhttp:4.9.0' //rxhttp v2.2.2版本起,需要手动依赖okhttp
    kapt 'com.github.liujingxing.rxhttp:rxhttp-compiler:2.6.0' //生成RxHttp类,纯Java项目,请使用annotationProcessor代替kapt
 } 

2、可选

android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    rxhttp_package: 'rxhttp',   //非必须,指定RxHttp类包名
                    //传入你依赖的rxjava版本,可传入rxjava2、rxjava3,依赖RxJava时必须
                    rxhttp_rxjava: 'rxjava3'

                ]
            }
        }
    }
}
dependencies {
    implementation 'com.github.liujingxing.rxlife:rxlife-coroutine:2.1.0' //管理协程生命周期,页面销毁,关闭请求
    
    //rxjava2   (RxJava2/Rxjava3二选一,使用asXxx方法时必须)
    implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
    implementation 'com.github.liujingxing.rxlife:rxlife-rxjava2:2.1.0' //管理RxJava2生命周期,页面销毁,关闭请求

    //rxjava3
    implementation 'io.reactivex.rxjava3:rxjava:3.0.6'
    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
    implementation 'com.github.liujingxing.rxlife:rxlife-rxjava3:2.1.0' //管理RxJava3生命周期,页面销毁,关闭请求

    //非必须,根据自己需求选择 RxHttp默认内置了GsonConverter
    implementation 'com.github.liujingxing.rxhttp:converter-fastjson:2.6.0'
    implementation 'com.github.liujingxing.rxhttp:converter-jackson:2.6.0'
    implementation 'com.github.liujingxing.rxhttp:converter-moshi:2.6.0'
    implementation 'com.github.liujingxing.rxhttp:converter-protobuf:2.6.0'
    implementation 'com.github.liujingxing.rxhttp:converter-simplexml:2.6.0'
} 

最后,rebuild一下(此步骤是必须的) ,就会自动生成RxHttp类

三部曲解说

到这里相信很多人已经有疑问了

  • 如果我想发送Post等其它方式请求呢?
  • 文件上传下载及进度的监听呢?
  • 我想得到自定义的数据类型呢?

这些如何通过三部曲实现呢?别着急,接下来一一为大家讲解

第一步,确定请求方式

上面例子中,我们调用了RxHttp.get("http://...")语句,其中get操作符就代表Get请求。由此,我们可以猜测,发送Post请求,只需要调用post操作符即可。然而我们只猜对了一半,为啥这么说呢?Post请求中,我们常见的又分为两种,一种的表单形式的Post,另一种是Json字符串形式的Post。为此,RxHttp提供了两个发送Post请求的操作符,分别是postFormpostJosn,此时,我们就可以这样发送Post请求

RxHttp.postForm("http://...")  //发送表单形式的Post请求 
    .asString()                //返回String类型 
    .subscribe(s -> {          //订阅观察者,
        //请求成功 
    }, throwable -> {                                  
        //请求失败 
    });  
    
RxHttp.postJson("http://...")  //发送Json字符串单形式的Post请求 
    .asString()                //返回String类型 
    .subscribe(s -> {          //订阅观察者,
        //请求成功 
    }, throwable -> {                                  
        //请求失败 
    }); 

如果想发送Delete、Put等其它方式的请求,同理,如下:

RxHttp.deleteForm("http://...")
RxHttp.deleteJson("http://...")
RxHttp.putForm("http://...")
RxHttp.putJson("http://...")
//其它请求方式同上 

最后,我们来看下,RxHttp都提供了哪些请求方式,如下:其中getpostFormpostJson上面已经讲过了,其它的同理,这里就不再讲述了。

请求方式确定了,如何添加参数或者头像信息呢?so easy!!!,只需调用addaddHeader即可,如下:

RxHttp.postForm("http://...")  //发送表单形式的Post请求 
    .add("key","value")        //添加请求参数,该方法可调用多次 
    .addHeader("headerKey","headerValue")  //添加请求头参数,该方法可调用多次 
    .asString()                //返回String类型 
    .subscribe(s -> {          //订阅观察者,
        //请求成功 
    }, throwable -> {                                  
        //请求失败 
    }); 

第二步,确定返回数据类型

上面的asString操作符代表返回String字符串类型,RxHttp提供了一系列asXXX操作符,如下:

其中,asBoolean、asInteger、asLong、asString等,很好理解,就是返回基本类型的装箱类型,。这个不就过多讲解。这里我们重点看下asClassasListasDownload这3个操作符。

asClass

显示开发中,我们返回的更多是自定义的数据类型,比如我们想得到一个Student对象,此时,我们就可以用asClass操作符,如下:

RxHttp.get("http://...")       //发送Get请求 
    .asClass(Student.class)   //指定返回User类型数据 
    .subscribe(student -> {    //订阅观察者,
        //请求成功,这里student就是Student对象 
    }, throwable -> {                                  
        //请求失败 
    }); 

asList

然而,如果我们想得到一系列Student对象呢?使用asObject显然行不通,此时就要用到asList操作符了,如下:

RxHttp.get("http://...")        //发送Get请求 
    .asList(Student.class)      //指定返回User类型数据 
    .subscribe(students -> {    //订阅观察者,
        //请求成功,这里students就是List<Student>对象 
    }, throwable -> {                                  
        //请求失败 
    }); 

注:asXXX操作符,内部会默认指定请求在Schedulers.io()线程执行

asDownload

当我们需要下载文件,就用此操作符,如下:

 RxHttp.get("http://...")        //Get请求 
     .asDownload(".../rxhttp.apk")  //使用asDownload操作符,并传入存储路径
     .subscribe(s -> {                                       
         //下载成功回调,s为文件存储路径 
     }, throwable -> {                             
         //下载失败回调 
     }); 

更多文件操作,请查看Android 史上最优雅的实现文件上传、下载及进度的监听

第三步,订阅观察者

在上一步中,细心的你也许发现了,使用了asXXX操作符后,会返回一个Observable对象,那这个又是什么对象呢?其实它就是RxJava内部的Observable对象。

在这,可以告诉你,当我们调用asXXX操作符,拿到Observable对象后,RxHttp就已经完成了它的使命,接下来的事情都丢给了RxJava。拿到Observable对象,结合RxJava强大的操作符,我们可以做非常多的事情,比如我们想要在主线程回调观察者,如下:

RxHttp.get("http://...")        //发送Get请求 
    .asList(Student.class)      //指定返回User类型数据 
    .observeOn(AndroidSchedulers.mainThread())  //主线程回调观察者
    .subscribe(students -> {    //订阅观察者,
        //请求成功,这里students就是List<Student>对象 
    }, throwable -> {                                  
        //请求失败 
    }); 

注:请求默认在Schedulers.io()线程执行,如未指定观察者所在线程,则默认在请求所在线程回调

小结

好了,请求三部曲就讲解结束,到这,你已经掌握了RxHttp 70% 的功能,并且掌握了RxHttp的精髓----请求三部曲,在任意请求中,就能做到以不变应万变。 本篇文章的目的在于提供一个简单的入门教程,更多功能请查看

RxHttp 让你眼前一亮的Http请求框架

RxHttp ,比Retrofit 更优雅的协程体验

RxHttp 完美适配Android 10/11 上传/下载/进度监听

RxHttp 全网Http缓存最优解

在使用过程中,如遇到什么问题,环境加群交流RxHttp&RxLife 交流群:378530627

最后

按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。

整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。

图片

图片

因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。

如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。

(一)架构师必备Java基础

1、深入理解Java泛型

2、注解深入浅出

3、并发编程

4、数据传输与序列化

5、Java虚拟机原理

6、高效IO

……

图片

(二)设计思想解读开源框架

1、热修复设计

2、插件化框架设计

3、组件化框架设计

4、图片加载框架

5、网络访问框架设计

6、RXJava响应式编程框架设计

……

图片

(三)360°全方位性能优化

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

……

图片

(四)Android框架体系架构

1、高级UI晋升

2、Android内核组件

3、大型项目必备IPC

4、数据持久与序列化

5、Framework内核解析

……

图片

(五)NDK模块开发

1、NDK开发之C/C++入门

2、JNI模块开发

3、Linux编程

4、底层图片处理

5、音视频开发

6、机器学习

……

图片

(六)Flutter学习进阶

1、Flutter跨平台开发概述

2、Windows中Flutter开发环境搭建

3、编写你的第一个Flutter APP

4、Flutter Dart语言系统入门

……

图片

(七)微信小程序开发

1、小程序概述及入门

2、小程序UI开发

3、API操作

4、购物商场项目实战

……

图片

(八)kotlin从入门到精通

1、准备开始

2、基础

3、类和对象

4、函数和lambda表达式

5、其他

……

图片

好啦,这份资料就给大家介绍到这了,有需要详细文档的小伙伴,可以微信扫下方二维码领取哈~

img


版权声明:本文为Aerfa789原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。