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

TigerOKHttp特性

封装之后其支持的功能特性包括如下:

  1. 一般的get同步阻塞请求和异步请求

  2. 一般的post同步阻塞请求和异步请求

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

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

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

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

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

  8. 支持取消某个请求

如果还不知道如何使用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框架的所有功能的使用方法,欢迎各位下载使用。

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

基于OkHttp的封装库TigerOkHttp的使用的更多相关文章

  1. Android 一个改进的okHttp封装库

    一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...

  2. Android 一个改善的okHttp封装库

    膜拜一下~ 转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/49734867: 本文出自:[张鸿洋的博客] 一.概述 之前写了篇A ...

  3. okhttputils【 Android 一个改善的okHttp封装库】使用(一)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文使用的OKHttp封装库是张鸿洋(鸿神)写的,因为在项目中一直使用这个库,所以对于一些常用的请求方式都验证过,所以特此整理下. ...

  4. okhttputils【 Android 一个改善的okHttp封装库】使用(三)

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这一篇主要讲一下将OkHttpUtils运用到mvp模式中. 数据请求地址:http://www.wanandroid.com/to ...

  5. android 开发 - 使用okhttp框架封装的开发框架

    概述 在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装.我使用Builder设计模式进行了封装形成oknet开源库. 介绍 ...

  6. Axios 是一个基于 promise 的 HTTP 库

    Axios 是一个基于 promise 的 HTTP 库 vue项目中关于axios的简单使用 axios介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.j ...

  7. Okhttp实用封装

    概述 对okhttp的get,put,delete,post请求简单封装,减少了不必要的冗余代码 详细 代码下载:http://www.demodashi.com/demo/11101.html 在自 ...

  8. [开源] 基于Layui组件封装的后台模版,HG-Layui-UI通用后台管理框架V1.0版

    HG框架简介 HG-Layui-UI框架,是基于layui最新版UI搭建的一套通用后台管理框架,借鉴了市面上各大主流框架风格,采用iframe标签页实现,保留了传统开发模式的简单实用性. 为快速开发减 ...

  9. Element没更新了?Element没更新,基于El的扩展库更新

    think-vuele 基于Vue和ElementUI框架进行整合二次开发的一个框架.提供一些elementUI没有的或当时没有的控件.优化了或简化了便于2B软件开发的一些控件 demo:http:/ ...

随机推荐

  1. SharePoint 2013 运行在IIS 应用32位错误

    问题描述: 今天有一个项目因为用了OWC11,没有64位的dll,因此IIS设置了“启用32位应用程序”为true. 如图: 详细操作见:http://www.cnblogs.com/cainiaog ...

  2. Arrays.equals()

    我们知道判断字符串相等使用的是equals方法,那么要是判断两个字符串数组是否相等呢,要是char数组呢,同样的java.util.Arrays类提供了equals()方法,如下是官方API: /** ...

  3. BW增强数据源的两种方法

    BW增强数据源的两种方法 2009-04-01, by SAPBI 前言:我们经常会遇到系统标准的数据源,或者我们自建的数据源无法满足要求的情况,这个时候在数据源中添加几个相关的字段,可能就能满足我们 ...

  4. (spring-第15回【IoC基础篇】)容器事件

    五个人在报社订阅了报纸.报社一旦有了新报纸,就派员工分别送到这五个人手里.在这个例子中,“报纸”就是事件,“报社”就是广播器,五个订阅者就是监听器.广播器收到事件,把事件传给监听器,监听器对事件做一些 ...

  5. Fake_AP模式下的Easy-Creds浅析

    Easy-Creds是一款欺骗嗅探为主的攻击脚本工具,他具备arp毒化,dns毒化等一些嗅探攻击模式.它最亮的地方就是它的fakeAP功能.它比一般自行搭建的fake AP要稳定的多.而且里面还包含了 ...

  6. 【模块应用】MFRC522开发笔记

    一.了解基本概念 ①ISO-14443A协议:( 国际标准化组织:International Organization for Standardization)RFID协议的一种;   PICC:临近 ...

  7. Interview----判断两个链表是否相交?

    题目描述: 判断两个单链表是否相交?假设链表没有环. 假如链表有环呢? 1.  假如没有环 那么如果两个链表相交的话,必然最后的节点一定是同一个节点.所以只需要各自扫描一遍链表,找到最后一个节点,比较 ...

  8. XMPP协议的原理介绍

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测.它在促进服务器之间的准即时操作.这个协议可能最终允许因特网用户向因特网上的其他任何人发送 ...

  9. ASP.NET获取客户端及服务器的信息

    客户端信息: 1. 在ASP.NET中专用属性: 获取服务器电脑名:Page.Server.ManchineName 获取用户信息:Page.User 获取客户端电脑名:Page.Request.Us ...

  10. oracle疑难杂症问题

    在虚拟机中安装了oracle10g,由于虚拟机的空间有限,看到磁盘空间快没了,就手贱把oracle目录中的空文件夹(E:\oracle\product\10.2.0\flash_recovery_ar ...