本期推荐的是一个基于okhttp的标准RESTful风格的网络框架——OkGo – 3.0。
OkGo 3.0是基于 Http 协议,封装了 OkHttp 的网络请求框架,比 Retrofit 更加简单易用,支持 RxJava,RxJava2,支持自定义缓存,支持批量断点下载管理和批量上传管理功能。
主要功能
- 基本的get、post、put、delete、head、options、trace、patch八种请求
- 支持upString,upJson,upBytes,upFile等up类方法上传特定数据
- 支持一个key上传一个文件,也可以一个key上传多个文件,也可以多文件和多参数一起上传
- 大文件下载和下载进度回调
- 大文件上传和上传进度回调
- 支持cookie的自动管理,并可自定义cookie管理策略
- 支持缓存模式,不仅支持http缓存协议,也支持自定义缓存策略
- 支持重定向
- 支持自定义超时自动重连次数
- 支持链式调用
- 支持https访问,支持双向认证
- 支持根据tag取消请求,也可全部取消
- 支持自定义Callback,自动解析网络数据
依赖
//必须使用
compile 'com.lzy.net:okgo:3.0.4'
//以下三个选择添加,okrx和okrx2不能同时使用
compile 'com.lzy.net:okrx:1.0.2'
compile 'com.lzy.net:okrx2:2.0.2'
compile 'com.lzy.net:okserver:2.0.5'
使用示例
1 初始化配置
OkGo.getInstance().init(this);
2 可用参数
- .post(url):post请求,当然一共支持GET,HEAD,OPTIONS,POST,PUT,DELETE, PATCH, TRACE这8种请求方式。
- .params():添加参数的时候,最后一个isReplace为可选参数,默认为true,即代表相同key的时候,后添加的会覆盖先前添加的。
- .tag(this):请求的tag,用于标识当前的请求,方便后续取消对应的请求,如果你不需要取消请求,也可以不用设置。
- .isMultipart():该方法表示是否强制使用multipart/form-data表单上传,因为该框架在有文件的时候,无论你是否设置这个参数,默认都是multipart/form-data格式上传,但是如果参数中不包含文件,默认使用application/x-www-form-urlencoded格式上传,如果你的服务器要求无论是否有文件,都要使用表单上传,那么可以用这个参数设置为true。
- .isSpliceUrl():该方法表示是否强制将params的参数拼接到url后面,默认false不拼接。一般来说,post、put等有请求体的方法应该把参数都放在请求体中,不应该放在url上,但是有的服务端可能不太规范,url和请求体都需要传递参数,那么这时候就使用该参数,他会将你所有使用.params()方法传递的参数,自动拼接在url后面。
- .retryCount():该方法是配置超时重连次数,也可以在全局初始化的时候设置,默认使用全局的配置,即为3次,你也可以在这里为你的这个请求特殊配置一个,并不会影响全局其他请求的超时重连次数。
- .cacheKey() .cacheTime() .cacheMode():这三个是缓存相关的配置,详细请看缓存介绍
- .headers():该方法是传递服务端需要的请求头,如果你不知道什么是请求头,看wiki首页关于网络抓包中的http协议链接。
- .params():该方法传递键值对参数,格式也是http协议中的格式,详细参考上面的http协议连接。
- .addUrlParams() .addFileParams() .addFileWrapperParams():这里是支持一个key传递多个文本参数,也支持一个key传递多个文件参数,详细也看上面的http协议连接。
3 Response对象
Response对象内部一共有5个字段,分别表示以下意思:
- body:当前返回的数据,T即为数据的泛型。使用方法body()获取该值。如果请求成功,回调onSuccess(),该字段为convertResponse()解析数据后返回的数据。如果发生异常,回调onError(),该字段值为null。
- throwable:如果发生异常,回调onError(),该字段保存了当前的异常信息。如果请求成功,回调onSuccess(),该字段为null。使用方法getException()获取该值。
- isFromCache:表示当前的数据是来自哪里,true:来自缓存,false:来自网络。使用方法isFromCache()获取该值。
- rawCall:表示当前请求的真正okhttp3.Call对象。使用方法getRawCall()获取该值。
- rawResponse:表示当前请求服务端真正返回的okhttp3.Response对象,注意:如果数据来自缓存,该对象为null,如果来自网络,该对象才有值。使用方法getRawResponse()获取该值。
另外,该对象还有以下几个方法:
- code():http协议的响应状态码,如果数据来自网络,无论成功失败,该值都为真实的响应码,如果数据来自缓存,该值一直为-1。
- message():http协议对响应状态码的描述信息,如果数据来自网络,无论成功失败,该值都为真实地描述信息,如果数据来自缓存,该值一直为null。
- headers():服务端返回的响应头信息,如果数据来自网络,无论成功失败,该值都为真实的头信息,如果数据来自缓存,该值一直为null。
- isSuccessful():本次请求是否成功,判断依据是是否发生了异常。
3 示例代码
//登录请求
String path = "https://......";// 登录链接
OkGo.<String>post(path).tag(this)
.params("userName",userName)
.params("password",password)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
//登录成功
}
@Override
public void onError(Response<String> response) {
//登录失败
}
});
演示
—END—
开源协议:Apache2.0