基于OkHttp的封装库TigerOkHttp的使用

在前面熟悉了OkHttp的用法以后,为了简化用法同时适用于个人项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOkHttp)git

TigerOKHttp特性

封装以后其支持的功能特性包括以下:github

  1. 通常的get同步阻塞请求和异步请求数组

  2. 通常的post同步阻塞请求和异步请求缓存

  3. 实现了文件上传功能(包含文件上传进度回调显示)app

  4. 实现了大文件下载功能,只须要指定文件下载路径便可,也包含了下载进度的回调显示框架

  5. 实现了请求结果的自动解析,用户也能够根据需求扩展自定义结果解析类异步

  6. 对全部请求都支持直接将结果解析转换为JavaBean对象或集合ide

  7. 支持对返回结果结构的自定义,例如设置返回结果结构为:{flag:1|0,error:错误信息,result:请求结果},结果解析的时候会按照此结构进行结果解析函数

  8. 支持取消某个请求post

若是还不知道如何使用OkHttp请参考个人上一篇文章 Android中OkHttp的使用 进行了解。

初始化配置

全部的请求在使用以前,先在Application里执行TigerOkHttp.init(new TigerHttpConfig(getApplicationContext()));进行TigerOkHttp的初始化操做。

TigerHttpConfig中主要是设置请求的全局性配置:

  1. TigerHttpConfig.readTimeOut:设置全局请求的数据读取超时时间,默认为30s

  2. TigerHttpConfig.writeTimeOut:设置全局请求的数据写入超时时间,默认为15s

  3. TigerHttpConfig.connectTimeOut:设置全局请求的链接超时时间,默认为15s

  4. TigerHttpConfig.cacheSize:设置全局请求的缓存大小,默认为10M

  5. TigerHttpConfig.cacheDirectory:设置全局请求的缓存存储路径,默认为系统给应用分配的缓存路径

  6. TigerHttpConfig.isWrapperResult:设置全局请求结果是否对结果进行了封装,默认为true

  7. TigerHttpConfig.wrapperJsonResult:设置全局请求结果的结构类型,在isWrapperResult为true时才起做用

WrapperJson主要自定义设置全局请求结果的结构类型:

  1. WrapperJson.code_name:设置请求成功与否的状态码字段,默认为:flag

  2. WrapperJson.result_name:设置请求成功后结果字段,默认为:result

  3. WrapperJson.error_name:设置请求失败后的错误信息字段(仅在请求失败时才有值),默认为:error

  4. WrapperJson.code_error_value:设置请求失败的状态码值,当请求状态码与此值相等时表明请求失败

Get请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*-------------------- 如下为Get同步阻塞请求 -------------------------------*/
//根据请求URL构造请求对象,请求成功后直接返回结果为Model对象
TigerJsonRequest<Model> request = new TigerJsonRequest<Model>(URL, Model.class);
/*
* 若是要同步请求返回Model集合的话,请求对象这样构造
* TigerJsonRequest<List<Model>> request = new TigerJsonRequest<List<Model>>(URL, Model.class);
*/
//如下添加三个请求参数
request.addParam( "value", "同步get请求-返回Model")
.addParam( "isModel", true)
.addParam( "isList", false);
//同步阻塞请求,直接返回Model对象
Model result = TigerOkHttp.getSync(request);
//同步阻塞请求,直接返回Model集合
//List<Model> result = TigerOkHttp.getSync(request);
/*-------------------- 如下为Get异步请求 ------------------------------*/
//根据请求URL构造请求对象,请求成功直接返回结果为Model集合
TigerJsonRequest<List<Model>> request = new TigerJsonRequest<List<Model>>(URL);
//添加三个请求参数
request.addParam( "value", "异步get请求-返回List<Model>")
.addParam( "isModel", true)
.addParam( "isList", true)
.setRequestCallback( new RequestCallback<List<Model>>() {//设置异步请求回调
@Override
public void onSuccess(List<Model>result) {
showResult(result.toString());
}
 
@Override
public void onFailure(TigerHttpException e) {
showResult(e.getMessage());
}
});
//开始异步请求
TigerOkHttp.getAsync(request);

上面即为通常Get同步阻塞请求和异步请求的方式,对这两个请求须要说明几点:

  1. 首先根据请求URL构造一个请求对象TigerJsonRequest,若是为同步阻塞请求必须调用具备两个参数的构造函数以设置请求地址和设置请求返回的结果类型,若是是异步请求则只须要调用一个参数的构造函数设置请求地址便可(异步请求的返回结果类型会自动根据泛型判断)

  2. 在请求对象添加此请求相关的请求参数

  3. 若是是异步请求,在请求对象中添加异步请求回调接口RequestCallback

  4. 根据是否为异步请求在TigerOkHttp中选择对应的请求方法开始请求操做

  5. 若是解析后返回Model对象话,服务端返回的结果必须是JSON字符串,若是解析后返回Model集合的话,服务端返回的结果必须是JSON数组字符串

Post请求

这里的Post同步、异步请求和上面的Get的同步异步请求方式基本上同样,构造请求对象TigerJsonRequest的方式是如出一辙的,惟一的区别只是在最后发起请求操做上更换了请求方法

  1. post同步阻塞请求的发起方式为:T result = TigerOkHttp.postSync(request);

  2. post异步请求的发起方式为:TigerOkHttp.postAsync(request);

自定义结果解析器

TigerJsonRequest自带的默认解析器TigerJsonParser没法知足你的功能需求时,咱们只须要简单的两步便可为某次请求实现自定义解析器:

  1. 继承TigerParser<T>(会自动根据设置的全局结果结构进行解析判断请求是否成功、拿到请求的真正结果数据)这个解析基类而后实现public abstract T parser(BufferedSource source) throws TigerHttpException;方法

  2. 经过TigerJsonRequest类中的方法setDataParser(TigerParser dataParser)设置这次请求的结果解析器

上传文件

上传文件模块我是在TigerJsonRequest基础上扩展出了一个专门针对上传文件的请求对象TigerUploadRequest,具体的上传文件实现方式以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//根据上传请求地址和文件路径构造文件上传请求对象
TigerUploadRequest<String> request = new TigerUploadRequest<String>(url, filePath);
//设置上传回调监听
request.setRequestCallback(
new RequestCallback<String>() {
@Override
public void onPreExecute() {
super.onPreExecute();
//此处能够初始化显示上传进度UI
}
 
@Override
public void onSuccess(String result) {
//文件上传成功
}
 
@Override
public void onLoading(long count, long current) {
super.onLoading(count, current);
//此处能够更新上传进度
}
@Override
public void onFailure(TigerHttpException e) {
//文件上传失败
}
 
@Override
public void onAfterExecute() {
super.onAfterExecute();
//此处能够隐藏上传进度条
}
});
//发起上传操做
TigerOkHttp.postAsync(request);

下载文件

下载文件功能须要用到另一个请求对象TigerFileRequest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//根据下载请求地址和下载文件的保存路径构造请求对象
TigerFileRequest request = new TigerFileRequest(URL, fileSavePath);
//添加一个请求参数
request.addParam( "method", "download")
//设置下载过程当中的回调接口
.setRequestCallback( new RequestCallback<File>() {
@Override
public void onPreExecute() {
super.onPreExecute();
//此处初始化显示下载进度条UI
}
@Override
public void onSuccess(File result) {
//下载成功,同时返回下载成功的文件
}
@Override
public void onLoading(long count, long current) {
super.onLoading(count, current);
//更新下载进度UI
}
@Override
public void onFailure(TigerHttpException e) {
//下载失败
}
@Override
public void onAfterExecute() {
super.onAfterExecute();
//隐藏下载进度条UI
}
});
//发起下载请求
TigerOkHttp.getAsync(request);

取消某个请求

取消某个请求只须要调用TigerOkHttp.cancel(request.getTag())便可,若是没有手动设置请求对象request的tag值,请求的时候会自动为此次请求生成一个惟一的tag

以上基本上就是TigerOkHttp框架的全部功能的使用方法,欢迎各位下载使用。

因为本人能力有限,此框架可能存在某些不足的地方,若是各位发现问题,欢迎提出,我会尽快解决,另外我会不断丰富完善此框架的功能。

相关文章
相关标签/搜索