OkHttp 使用 get post UI线程回调 上传 下载 进度监听 更好地封装
2015-12-26 09:20
1041 查看
前几天自己写了一个OkHttp的封装 因为自己在项目中有用到,包括post请求,自定义接口UI更新,上传下载进度显示 用起来也还行,该有的都有,但是今天看了一下网上一些关于OKHttp的资料,说来也是巧啊,我刚开始用OkHttp的时候也就前2个多月吧,相关资料那是相当的少啊,每次有问题都要在StackOverflow上找,短短一个月发现了最近特别多的大神,对于OKHttp的封装和介绍的blog,这也意味着OKHttp成为潮流吧…
说说从这些看到的blog中吸收到的知识吧。
-开始不明白为什么OkHttp在回调的时候是在子线程,后面发现他可以直接读取流,意味着这里是可以直接下载大文件的所以用在子线程,Volley是直接回调在UI线程,所以官方文档也有说不适合大文件上传下载,想想确实有道理;
前面博客也有介绍OKHttp的使用(发现写的有点乱)
http://blog.csdn.net/liubo20140401/article/details/48340955
这里做了更好封装 使用更加方便
这里把自己项目中 使用的 封装了一下 实现了 get postUI线程回调 上传 下载 进度监听
(如果图片查看不了 来这里 简书地址 CSDN限制上传大小了)
(简书地址)[]http://www.jianshu.com/p/7d670eb07431]
使用方法如下
Get 请求
Post 请求
download progress监听
upload progress监听
大致使用就这样
Demo 上传到了 github 地址
说说从这些看到的blog中吸收到的知识吧。
-开始不明白为什么OkHttp在回调的时候是在子线程,后面发现他可以直接读取流,意味着这里是可以直接下载大文件的所以用在子线程,Volley是直接回调在UI线程,所以官方文档也有说不适合大文件上传下载,想想确实有道理;
前面博客也有介绍OKHttp的使用(发现写的有点乱)
http://blog.csdn.net/liubo20140401/article/details/48340955
这里做了更好封装 使用更加方便
这里把自己项目中 使用的 封装了一下 实现了 get postUI线程回调 上传 下载 进度监听
(如果图片查看不了 来这里 简书地址 CSDN限制上传大小了)
(简书地址)[]http://www.jianshu.com/p/7d670eb07431]
使用方法如下
Get 请求
Request request=new Request.Builder() .get() .tag(this) .url("http:www.baidu.com") .build(); DOkHttp.getInstance().getData4Server(request, new OkHttpUtil.MyCallBack() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(String json) { changeUI(); } });
Post 请求
RequestBody requestBody=new FormEncodingBuilder() .add("key","value") .addHeader(COOKIE, sessionId) //cookie添加 .build(); Request request=new Request.Builder() .post(requestBody) .tag(this) .url("http:www.baidu.com") .build(); DOkHttp.getInstance().getData4Server(request, new OkHttpUtil.MyCallBack() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(String json) { changeUI(); } });
download progress监听
Request request=new Request.Builder() .tag(this) .get() .url("http://7xnbj0.com1.z0.glb.clouddn.com/IMG_1919.jpg") .build(); DOkHttp.getInstance().download4ServerListener(request, new DOkHttp.MyCallBack_Progress() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) { file=FileUtils.saveFile2Local(response,dir,"download.jpg"); progressDialog.dismiss(); } }, new DOkHttp.UIchangeListener() { @Override public void progressUpdate(long bytesWrite, long contentLength, boolean done) { int progress= (int) (bytesWrite*100/contentLength); Log.e("Download",progress+""); progressDialog.setProgress(progress); tv_show.append(progress+"\n"); } });
upload progress监听
MultipartBuilder mb = new MultipartBuilder(); mb.type(MultipartBuilder.FORM); mb.addFormDataPart("user_id", "74"); mb.addFormDataPart("user_head", file.getName(), RequestBody.create(null, file)); RequestBody requestBody = mb.build(); String url="接口地址"; DOkHttp.getInstance().uploadPost2ServerProgress(this,url,requestBody,new DOkHttp.MyCallBack(){ @Override public void onFailure(Request request, IOException e) { tv_show.setText(e.getMessage()); } @Override public void onResponse(String json) { progressDialog.dismiss(); tv_show.setText(json); } },new DOkHttp.UIchangeListener(){ @Override public void progressUpdate(long bytesWrite, long contentLength, boolean done) { int progress= (int) (bytesWrite*100/contentLength); progressDialog.setProgress(progress); tv_show.append(progress+"\n"); } });
大致使用就这样
Demo 上传到了 github 地址
相关文章推荐
- IE:使用搜索助手
- CMOS使用及维护须知
- CSS使用心得体会
- C#中尾递归的使用、优化及编译器优化
- 深入HTTP head的使用详解
- C#虚方法的声明和使用实例教程
- 影响jQuery使用的14个方面
- 如何高效的使用内存
- C#中Dictionary类使用实例
- PowerShell入门教程之创建和使用配置文件实例
- SQL语句实现查询SQL Server内存使用状况
- 使用准则进行条件查询
- 学习使用PHP数组
- 使用PHP的错误处理
- 使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息
- 重定向符(、)的使用
- Nodejs的express使用教程
- Silverlight文件上传下载实现方法(下载保存)
- C#注释的一些使用方法浅谈
- C# Dictionary的使用实例代码