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

以上14个请求方法你会发现,其实就6个类型,分别对应是Get、Head、Post、Put、Patch、Delete方法,只是其中Post、Put、Patch、Delete各有3个方法有不同形式的提交方式,只需要根据自己的需求选择就好 。
如以上方法还不能满足你的需求,我们还可以通过@Param注解自定义请求方法,有关注解的使用,本文后续会详细介绍 。
注:当调用xxxForm方法发送请求时,通过setMultiForm()方法或者调用addFile(String, File)添加文件时,内部会自动将参数以{multipart/form-data}方式提交
添加参数/请求头
确定请求方法后,我们就可以调用一系列addXxx()方法添加参数/请求头,如下:
RxHttp.get("/service/...")//发送get请求.add("key", "value")//添加参数.addAll(new HashMap<>())//通过Map添加多个参数.addHeader("deviceType", "android")//添加请求头...任意请求,都可调用以上3个方法添加参数/请求头,当然,在不同的请求方式下,也会有不同的addXxx方法供开发者调用 。如下:
//postJson请求方法下会有更多addAll等方法可供调用RxHttp.postJson("/service/...") //发送post Json请求.addAll(new JsonObject())//通过json对象添加多个参数.addAll("{"height":180,"weight":70}") //通过json字符串添加多个参数...//postForm请求方法下会有一系列addFile方法可供调用RxHttp.postForm("/service/...")//发送post表单请求.addFile("file", new File("xxx/1.png")) //添加单个文件.addFile("fileList", new ArrayList<>()) //添加多个文件...以上只列出了几个常用的addXxx方法,更多方法请下载源码体验 。
3.3.2、第二部曲:确定返回数据类型添加好参数/请求头后,正式进入第二部曲,确定返回数据类型,我们通过asXxx方法确定返回类型,比如,我们要返回一个Student对象,就可以通过asObject(Class<T>)方法,如下:
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asObject(Student.class)//返回Student类型.subscribe(student -> {//请求成功,这里就能拿到 Student对象}, throwable -> {//请求失败});如果要返回Student对象列表,则可以通过asList(Class<T>)方法,如下:
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asList(Student.class)//返回List<Student>类型.subscribe(students -> {//请求成功,这里就能拿到 Student对象列表}, throwable -> {//请求失败});解析Response<T>类型数据
然而,现实开发中,大多数人的接口,返回的数据结构都类似下面的这个样子
public class Response<T> {private intcode;private String msg;private Tdata;//这里省略get、set方法}对于这种数据结构,按传统的写法,每次都要对code做判断,如果有100个请求,就要判断100次,真的会逼死强迫症患者 。
RxHttp对于这种情况,给出完美的答案,比如Response<T>里面的T代表一个Student对象,则可以通过asResponse(Class<T>)方法获取,如下:
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponse(Student.class)//返回Student类型.subscribe(student -> {//请求成功,这里能拿到 Student对象}, throwable -> {//请求失败});如果Response<T>里面的T代表一个List<Student>列表对象,则可以通过asResponseList(Class<T>)方法获取,如下
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponseList(Student.class)//返回List<Student>类型.subscribe(students -> {//请求成功,这里能拿到List<Student>列表对象}, throwable -> {//请求失败});更多时候,我们的列表数据是分页的,类似下面的数据结构
{"code": 0,"msg": "","data": {"totalPage": 0,"list": []}}此时,调用RxHttp的asResponsePageList(Class<T>)方法依然可以完美解决,如下:
RxHttp.postForm("/service/...")//发送post表单请求.add("key", "value")//添加参数,可调用多次.asResponsePageList(Student.class)//返回PageList<Student>类型.subscribe(pageList -> {//请求成功,这里能拿到PageList<Student>列表对象int totalPage = pageList.getTotalPage();//总页数List<Student> students = pageList.getData();//单页列表数据}, throwable -> {//请求失败});


推荐阅读