基于OkHttp的封装库TigerOkHttp的使用
在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOkHttp)
TigerOKHttp特性
封装之后其支持的功能特性包括如下:
一般的get同步阻塞请求和异步请求
一般的post同步阻塞请求和异步请求
实现了文件上传功能(包含文件上传进度回调显示)
实现了大文件下载功能,只需要指定文件下载路径即可,也包含了下载进度的回调显示
实现了请求结果的自动解析,用户也可以根据需求扩展自定义结果解析类
对所有请求都支持直接将结果解析转换为JavaBean对象或集合
支持对返回结果结构的自定义,例如设置返回结果结构为:{flag:1|0,error:错误信息,result:请求结果},结果解析的时候会按照此结构进行结果解析
支持取消某个请求
如果还不知道如何使用OkHttp请参考我的上一篇文章 Android中OkHttp的使用 进行了解。
初始化配置
所有的请求在使用之前,先在Application里执行TigerOkHttp.init(new TigerHttpConfig(getApplicationContext()));进行TigerOkHttp的初始化操作。
TigerHttpConfig中主要是设置请求的全局性配置:
TigerHttpConfig.readTimeOut:设置全局请求的数据读取超时时间,默认为30sTigerHttpConfig.writeTimeOut:设置全局请求的数据写入超时时间,默认为15sTigerHttpConfig.connectTimeOut:设置全局请求的连接超时时间,默认为15sTigerHttpConfig.cacheSize:设置全局请求的缓存大小,默认为10MTigerHttpConfig.cacheDirectory:设置全局请求的缓存存储路径,默认为系统给应用分配的缓存路径TigerHttpConfig.isWrapperResult:设置全局请求结果是否对结果进行了封装,默认为trueTigerHttpConfig.wrapperJsonResult:设置全局请求结果的结构类型,在isWrapperResult为true时才起作用
WrapperJson主要自定义设置全局请求结果的结构类型:
WrapperJson.code_name:设置请求成功与否的状态码字段,默认为:flagWrapperJson.result_name:设置请求成功后结果字段,默认为:resultWrapperJson.error_name:设置请求失败后的错误信息字段(仅在请求失败时才有值),默认为:errorWrapperJson.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同步阻塞请求和异步请求的方式,对这两个请求需要说明几点:
首先根据请求URL构造一个请求对象TigerJsonRequest,如果为同步阻塞请求必须调用具有两个参数的构造函数以设置请求地址和设置请求返回的结果类型,如果是异步请求则只需要调用一个参数的构造函数设置请求地址即可(异步请求的返回结果类型会自动根据泛型判断)
在请求对象添加此请求相关的请求参数
如果是异步请求,在请求对象中添加异步请求回调接口RequestCallback
根据是否为异步请求在TigerOkHttp中选择对应的请求方法开始请求操作
如果解析后返回Model对象话,服务端返回的结果必须是JSON字符串,如果解析后返回Model集合的话,服务端返回的结果必须是JSON数组字符串
Post请求
这里的Post同步、异步请求和上面的Get的同步异步请求方式基本上一样,构造请求对象TigerJsonRequest的方式是一模一样的,唯一的区别只是在最后发起请求操作上更换了请求方法
post同步阻塞请求的发起方式为:
T result = TigerOkHttp.postSync(request);post异步请求的发起方式为:
TigerOkHttp.postAsync(request);
自定义结果解析器
当TigerJsonRequest自带的默认解析器TigerJsonParser无法满足你的功能需求时,我们只需要简单的两步即可为某次请求实现自定义解析器:
继承
TigerParser<T>(会自动根据设置的全局结果结构进行解析判断请求是否成功、拿到请求的真正结果数据)这个解析基类然后实现public abstract T parser(BufferedSource source) throws TigerHttpException;方法通过
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框架的所有功能的使用方法,欢迎各位下载使用。
由于本人能力有限,此框架可能存在某些不足的地方,如果各位发现问题,欢迎提出,我会尽快解决,另外我会不断丰富完善此框架的功能。
基于OkHttp的封装库TigerOkHttp的使用的更多相关文章
- Android 一个改进的okHttp封装库
一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...
- Android 一个改善的okHttp封装库
膜拜一下~ 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867: 本文出自:[张鸿洋的博客] 一.概述 之前写了篇A ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(一)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...
- okhttputils【 Android 一个改善的okHttp封装库】使用(三)
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这一篇主要讲一下将OkHttpUtils运用到mvp模式中. 数据请求地址:http://www.wanandroid.com/to ...
- android 开发 - 使用okhttp框架封装的开发框架
概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...
- Axios 是一个基于 promise 的 HTTP 库
Axios 是一个基于 promise 的 HTTP 库 vue项目中关于axios的简单使用 axios介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.j ...
- Okhttp实用封装
概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...
- [开源] 基于Layui组件封装的后台模版,HG-Layui-UI通用后台管理框架V1.0版
HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...
- Element没更新了?Element没更新,基于El的扩展库更新
think-vuele 基于Vue和ElementUI框架进行整合二次开发的一个框架.提供一些elementUI没有的或当时没有的控件.优化了或简化了便于2B软件开发的一些控件 demo:http:/ ...
随机推荐
- iOS APP提交上架最新流程
时隔1年又让我鼓捣iOS,刚接手就是上架,经验值为0的我,虽然内心是拒绝的,但还是要接受这项任务滴!也就是在被拒后重新审核,再改在提交...这样反复的过程中也对上架流程熟悉了好多,写篇帖子 ...
- bistu新生-1005
#include "stdio.h"#include "string.h"int main(){ char ku[]={'0','1','2','3','4', ...
- 爬虫学习----获取cookie
http://blog.csdn.net/samxx8/article/details/21535901 1.获取cookie import urllib import http.cookiejarc ...
- vijos 1776 关押罪犯
带权并查集+贪心. #include<iostream> #include<cstdio> #include<cstring> #include<algori ...
- Java 集合深入理解(10):Deque 双端队列
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 什么是 Deque Deque 是 Double ended queue (双端队列) 的缩写,读音和 deck 一样,蛋 ...
- [数据结构]RMQ问题小结
RMQ问题小结 by Wine93 2014.1.14 1.算法简介 RMQ问题可分成以下2种 (1)静态RMQ:ST算法 一旦给定序列确定后就不在更新,只查询区间最大(小)值!这类问题可以用倍增 ...
- Rest文件下载
public void DownloadFile(string fileId) { //Stream fileStream = null; try { int fileID = Convert.ToI ...
- document操作
1.windows对象操作 事件两个参数sender:代表事件源,即谁触发的事件e:代表事件数据load(sender,e)事件是一个特殊的委托(代理)2.document对象操作找元素:1.根据id ...
- 第三个sprint第一天
一.例会人员:李泳江,邵家文,周伟雄,谢洪跃 日期:6月16号 例会内容: 1.更新核心功能 例会地点:宿舍 二.任务展示 编号 名称 时间 已用时间 是否完成 1 画出算法流程图 4小时 4小时 ...
- jquery.autocomplete自动补全功能
项目实例: 一:js //SupplierAutoComplete.js $().ready(function () { $("#txtSupplier").autocomplet ...