封装了okhttp的网络框架,支持大文件上传下载,上传进度...
Posted qq_594336505
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装了okhttp的网络框架,支持大文件上传下载,上传进度...相关的知识,希望对你有一定的参考价值。
本帖最后由 anjoy紫外线 于 2016-4-20 16:42 编辑 1.用法 对于Eclipse不能运行项目的,提供了apk供直接运行,位于项目根目录 okhttputils_v1.x.x.apk。
本项目Demo的网络请求是我自己的服务器,有时候可能不稳定,网速比较慢时请耐心等待。。
其中的图片选择是我的另一个开源项目,完全仿微信的图片选择库,自带 矩形图片裁剪 和 圆形图片裁剪 功能,有需要的可以去下载使用,附上地址:https://github.com/jeasonlzy0216/ImagePicker2.使用注意事项
一般在 Aplication,或者基类中,只需要调用一次即可,可以配置调试开关,全局的超时时间,公共的请求头和请求参数等信息
@Override public void onCreate() { super.onCreate();
HttpHeaders headers = new HttpHeaders(); headers.put("commonHeaderKey1", "commonHeaderValue1");
//所有的 header 都 不支持 中文 headers.put("commonHeaderKey2", "commonHeaderValue2");
HttpParams params = new HttpParams(); params.put("commonParamsKey1", "commonParamsValue1");
//所有的 params 都 支持 中文 params.put("commonParamsKey2", "这里支持中文参数");
//必须调用初始化 OkHttpUtils.init(this); //以下都不是必须的,根据需要自行选择
OkHttpUtils.getInstance()// .debug("OkHttpUtils")
//是否打开调试 .setConnectTimeout(OkHttpUtils.DEFAULT_MILLISECONDS)
//全局的连接超时时间 .setReadTimeOut(OkHttpUtils.DEFAULT_MILLISECONDS) //全局的读取超时时间
.setWriteTimeOut(OkHttpUtils.DEFAULT_MILLISECONDS) //全局的写入超时时间 .addCommonHeaders(headers)
//设置全局公共头 .addCommonParams(params); //设置全局公共参数
}二、普通请求1.基本的网络请求OkHttpUtils.get(Urls.URL_METHOD)
OkHttpUtils.get(Urls.URL_METHOD) // 请求方式和请求url
.tag(this) // 请求的 tag, 主要用于取消对应的请求 .cacheKey("cacheKey")
// 设置当前请求的缓存key,建议每个不同功能的请求设置一个 .cacheMode(CacheMode.DEFAULT) //
缓存模式,详细请看缓存介绍 .execute(new JsonCallback<RequestInfo>(RequestInfo.class)
{ @Override public void onResponse(boolean isFromCache,
RequestInfo requestInfo, Request request, @Nullable Response response)
{ // requestInfo 对象即为所需要的结果对象 } });2.请求 Bitmap 对象 OkHttpUtils.get(Urls.URL_IMAGE)// .tag(this)// .execute(new BitmapCallback() { @Override publicvoid onResponse(boolean isFromCache, Bitmap bitmap, Request request, @Nullable Response response) { // bitmap 即为返回的图片数据 } });3.请求 文件下载 OkHttpUtils.get(Urls.URL_DOWNLOAD)// .tag(this)// .execute(new FileCallback("/sdcard/temp/", "file.jpg") { //文件下载时,需要指定下载的文件目录和文件名 @Override public void onResponse(booleanisFromCache, File file, Request request, @Nullable Response response) { // file 即为文件数据,文件保存在指定布幕 } });4.普通Post,直接上传String类型的文本 OkHttpUtils.post(Urls.URL_TEXT_UPLOAD)//
.tag(this)// .content("这是要上传的长文本数据!")//
.mediaType(PostRequest.MEDIA_TYPE_PLAIN)// .execute(new StringCallback()
{ @Override public voidonResponse(boolean isFromCache,
String s, Request request, @Nullable Response response)
{ //上传成功 } });
5.请求功能的所有配置讲解
以下代码包含了以下内容:
每个请求前都设置了一个参数tag,取消则通过OkHttpUtils.cancel(tag)执行。 例如:在Activity中,当Activity销毁取消请求,可以在onDestory里面统一取消。
@Override protected void onDestroy() { super.onDestroy();
//根据 Tag 取消请求 OkHttpUtils.getInstance().cancelTag(this);
}7.同步的请求
execute方法不传入callback即为同步的请求,返回Response对象,需要自己解析
Response response = OkHttpUtils.get("http://www.baidu.com")// .tag(this)// .headers("aaa", "111")// .params("bbb", "222") .execute();三、自定义CallBack使用 目前内部提供的包含, , , ,可以根据自己的需求去自定义Callback
因为不同的项目需求,可能对数据格式进行了不同的封装,于是在 Demo 中的进行了详细的代码示例,以下是详细介绍:
以上基本是包含了大部分的业务逻辑,具体情况请参照demo示例,根据业务需求修改!
四、缓存的使用使用缓存前,必须让缓存的数据javaBean对象实现Serializable接口,否者会报NotSerializableException。
因为缓存的原理是将对象序列化后直接写入 数据库中,如果不实现Serializable接口,会导致对象无法序列化,进而无法写入到数据库中,也就达不到缓存的效果。
目前提供了四种CacheMode缓存模式
原文地址 https://github.com/jeasonlzy0216/OkHttpUtils |
以上是关于封装了okhttp的网络框架,支持大文件上传下载,上传进度...的主要内容,如果未能解决你的问题,请参考以下文章
android -------- OkGo (让网络请求更简单的框架)
优雅设计封装基于Okhttp3的网络框架:多线程下载添加数据库支持(greenDao)及 进度更新
OkHttpOkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )