-
-
Notifications
You must be signed in to change notification settings - Fork 458
返回自定义对象
简单返回一个Student对象,通过toObservable(Class<T>)
方法,如下:
RxHttp.postForm("/service/...") //发送post表单请求
.add("key", "value") //添加参数,可调用多次
.toObservable(Student.class) //返回Student类型
.subscribe(student -> {
//请求成功,这里就能拿到 Student对象
}, throwable -> {
//请求失败
});
返回List<Student>
列表对象,则可以通过toObservableList(Class<T>)
方法,如下:
RxHttp.postForm("/service/...") //发送post表单请求
.add("key", "value") //添加参数,可调用多次
.toObservableList(Student.class) //返回List<Student>类型
.subscribe(students -> {
//请求成功,这里就能拿到 Student对象列表
}, throwable -> {
//请求失败
});
解析Response<T>
类型数据
数据结构如下:
public class Response<T> {
private int code;
private String msg;
private T data;
//这里省略get、set方法
}
解析Response<Student>
数据,通过toObservableResponse(Class<T>)
方法,并对code统一判断
RxHttp.postForm("/service/...") //发送post表单请求
.add("key", "value") //添加参数,可调用多次
.toObservableResponse(Student.class) //返回Student类型,内部会对code判断
.subscribe(student -> {
//请求成功且code正确,直接拿到Student对象
}, (OnError) error -> {
//失败回调
int code = error.getErrorCode(); //拿到code字段
String errorMsg = error.getErrorMsg() //拿到msg字段
});
解析Response<List<Student>>
类型数据,通过toObservableResponseList(Class<T>)
方法,并对code统一判断
RxHttp.postForm("/service/...") //发送post表单请求
.add("key", "value") //添加参数,可调用多次
.toObservableResponseList(Student.class) //返回List<Student>类型,内部会对code判断
.subscribe(students -> {
//请求成功且code正确,直接拿到List<Student>列表对象
}, (OnError) error -> {
//失败回调
int code = error.getErrorCode(); //拿到code字段
String errorMsg = error.getErrorMsg() //拿到msg字段
});
解析Response<PageList<Student>>
分页列表数据,通过toObservableResponsePageList(Class<T>)
方法,并对code统一判断,数据结构如下:
{
"code": 0,
"msg": "",
"data": {
"totalPage": 0,
"list": []
}
}
此时,调用RxHttp的toObservableResponsePageList(Class<T>)
方法,如下:
RxHttp.postForm("/service/...") //发送post表单请求
.add("key", "value") //添加参数,可调用多次
.toObservableResponsePageList(Student.class) //返回PageList<Student>类型
.subscribe(pageList -> {
//请求成功,这里能拿到PageList<Student>列表对象
int totalPage = pageList.getTotalPage(); //总页数
List<Student> students = pageList.getData(); //单页列表数据
}, (OnError) error -> {
//失败回调
int code = error.getErrorCode(); //拿到code字段
String errorMsg = error.getErrorMsg() //拿到msg字段
});
注:上面的OnError接口并非是RxHttp内部提供的,而是自定义的,在Demo里可以找到
到这,估计很多人会问我:
- 你的code在哪里判断的?
- 我的code是100或者其它值才代表正确,怎么改?
- 我的
Response<T>
类里面的字段名,跟你的都不一样,怎么该? - 你这成功的时候直接返回
Response<T>
里面的T,那我还要拿到code做其他的判断,执行不同业务逻辑,怎么办?
这里可以先告诉大家,toObservableResponse(Class<T>)
、toObservableResponseList(Class<T>)
、toObservableResponsePageList(Class<T>)
这3个方法并不是RxHttp内部提供的,而是通过自定义解析器生成,里面的code判断、Response<T>
类都是开发者自定义的,如何自定义解析器,请查看自定义Parser
duang、duang、duang !!! 划重点,其实所有的toObservableXxx方法,最终都是通过toObservable(Parser<T>)
方法实现的,这里就不讲解了,想了解,请查看源码