Android网络框架-OkHttp3.0总结
一、概述
OkHttp是Square公司开发的一款服务于android的一个网络框架,主要包含:
- 一般的get请求
- 一般的post请求
- 基于Http的文件上传
- 文件下载
- 加载图片
- 支持请求回调,直接返回对象、对象集合
- 支持session的保持
github地址:https://github.com/square/okhttp
二、Http请求
对于一个Http请求,分为几个步骤:
- 创建一个OkhttpClient对象,建议全局只使用一个OkhttpClient
OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build;
- 创建一个Request对象,包含请求的url地址,请求的方式是get或者post,以及请求的内容
- 通过OkhttpClient创建一个newCall,将request包含于其中,类似于将你的request请求封装成了任务
- call的执行,有两种执行方式。一种是加入调度队列,call.enqueue,即异步执行call。一种是立即执行,call.execute,即同步执行,会阻塞线程直到请求完成。
- 最后就是执行之后的回调函数,注意如果是执行enqueue(),则回调函数不在主线程,如果要执行更新UI界面应将数据通过handler传回主线程
1 call.enqueue(new Callback(){ 2 @Override 3 public void onFailure(Call call, IOException e) 4 { 5 //执行失败回调函数,call及请求的引用 6 } 7 8 @Override 9 public void onResponse(Call call, Response response) throws IOException 10 { 11 //请求成功,获得response,可以通过调用response.body().string()获得服务器返回的数据。response.code()获得请求的状态代码 12 } 13 }); 14
以下是完整的get请求实例代码:
1 //创建okHttpClient对象 2 OkHttpClient mOkHttpClient = new OkHttpClient.Builder().build; 3 //创建一个Request 4 final Request request = new Request.Builder() 5 .url("https://github.com/hongyangAndroid") 6 .build(); 7 //new call 8 Call call = mOkHttpClient.newCall(request); 9 //请求加入调度 10 call.enqueue(new Callback() 11 { 12 @Override 13 public void onFailure(Request request, IOException e) 14 { 15 } 16 17 @Override 18 public void onResponse(final Response response) throws IOException 19 { 20 //String htmlStr = response.body().string(); 21 } 22 });
三、RequestBody
对于不同的请求,如get、post、文件上传等等,我们只要构造不同的Request即可。
- Get请求,我们可以直接在url里面添加要传递的数据即可
Request request = new Request.Builder().url("https://github.com/hongyangAndroid").build();
- Post请求
//构建一个表单RequestBody,在里面添加要传递的字段数据 RequestBody requestBody = new FormBody.Builder().add("userName",userName).add("passwd", passwd).build(); //将RequestBody传递给Request的Post Request request = new Request.Builder().url(url).post(requestBody).build();
- 带参数的文件上传
//建立文件上传请求 File file = new File(Environment.getExternalStorageDirectory(), "balabala.mp4"); RequestBody fileRequest = RequestBody.create(MediaType.parse("application/octet-stream"), file); //建立表单请求 RequestBody formRequest = RequestBody.create(null,"xxxx);//使用MultipartBody将两个RequestBody合在一起 RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBuilder.FORM).addPart(Headers.of("Content-Disposition", "form-data; name=\"username\""), formRequest).addPart(Headers.of("Content-Disposition", "form-data; name=\"mFile\"; filename=\"wjd.mp4\""), fileRequest).build();
四、cookie持久化
OkHttp提供了非常方便的Cookie管理方法,只要重写一个CookieJar类即可管理Cookie。
private static OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {private final ArrayList<Cookie> cookieStore = new ArrayList<Cookie>();@Overridepublic void saveFromResponse(HttpUrl httpUrl, List<Cookie> list) {//当获得一个Response时,会调用这个方法来存储Cookie cookieStore.addAll(list);}@Overridepublic List<Cookie> loadForRequest(HttpUrl httpUrl) {//当要call一个Request时,会调用这个方法来为请求的head添加cookieList<Cookie> cookies = cookieStore;return cookies != null ? cookies : new ArrayList<Cookie>();}}).build();
转载于:https://www.cnblogs.com/yesphet/p/5329587.html
Android网络框架-OkHttp3.0总结相关推荐
- Android 网络框架 Retrofit2.0介绍、使用和封装
前言 时至今日,Android的网络框架不再像之前那么到处都是,随着Google把 HttpClient直接删掉,似乎意味着Android越来越成熟.网络框架中的佼佼者Volley也不再那么光鲜,取而 ...
- Android网络框架okhttp3简单封装
1:在demo得build文件中添加依赖(这里以3.8.1版本为例) dependencies {compile 'com.squareup.okhttp3:okhttp:3.8.1' } 2:对网络 ...
- Android网络框架OK3,Android网络框架---OkHttp3
1 public class MainActivity extendsAppCompatActivity {2 3 @Override4 protected voidonCreate(Bundle s ...
- NoHttp开源Android网络框架1.0.0之架构分析
转载于:https://www.cnblogs.com/brucemengbm/p/7091521.html
- android网络框架
https://www.zhihu.com/question/35189851 个人比较推荐Square开源组合,用Retrofit(目前已经是2.0+)+OkHttp基本上已经可以处理任何业务场景了 ...
- ym—— Android网络框架Volley(终极篇)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103).谢谢支持! 没看使用过Volley的同学能够,先看看 Android网络框架Volley(体验篇) ...
- Android单元测试框架Robolectric3.0介绍(一)
Android单元测试框架Robolectric3.0介绍(一) 作者 geniusmart 关注 2016.01.21 00:37* 字数 1550 阅读 18265评论 55喜欢 124赞赏 2 ...
- Android网络框架Volley项目实战-刘桂林-专题视频课程
Android网络框架Volley项目实战-5257人已学习 课程介绍 使用Google 2013 I/O大会上发布的Volley请求框架做几个实战项目,归属地查询,QQ测试吉凶,天气 ...
- Android 网络框架_常用的网络框架
看了张哥(stormzhang)的博客之后,深有感触,又让我感慨了一番,而且发现张哥的博客英文跟汉字之间是有空格的,数字跟汉字之间也有空格,看起来很舒服很美观,张哥真的是把每一个细节都做的很好,所以身 ...
最新文章
- CodeForces - 632E Thief in a Shop 完全背包
- osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib
- 2362:Square 能否拼接为正方形 . DFS+回溯
- Qt工作笔记-QML界面与QWidgets界面相互交互
- 查找学生链表c语言,【查找链表面试题】面试问题:C语言实现学生… - 看准网...
- 信息安全系统设计基础实验四:外设驱动程序设计
- vue 局部回到顶部_vue中回到顶部
- html把中文转成英文,html转换中英文
- 解决浏览器 fakepath 实现图片上传预览
- 超火的微信渐变国旗头像,一键生成!!
- 自定义打卡签到view
- python数独代码_Python 解数独(Sudoku)
- 校运动会管理系统报告C语言,校运动会管理系统的报告C语言(含完整代码).doc
- 2021最新chrome浏览器与chromedriver版本对照表
- 交换机与二层转发原理
- ipad和android平板应用程序,安卓平板相比iPad有哪些优势和劣势?
- linux配置网卡绑定后不生效,Linux双网卡绑定实现负载均衡和失效保护
- 小程序配置域名访问出现ios可以正常访问但是android无法正常访问的问题排查
- 合振动的初相位推导_如何确定合振动的初相位
- 已知函数e ​x ​​ 可以展开为幂级数1+x+x ​2 ​​ /2!+x ​3 ​​ /3!+⋯+x ​k ​​ /k!+⋯。现给定一个实数x,要求利用此幂级数部分和求e ​x ​​ 的近似值,求和
热门文章
- 旺铺免费,淘宝的义务不能免
- Oracle中PL/SQL的循环语句
- 爱情神话:庄妃用美色套牢洪承畴之谜
- 36晋级12第五场:冯志刚决胜入围(节目视频)
- Anaconda3 离线安装 Django-3.2.7 及依赖项setuptools、sqlparse 、asgiref、typing_extensions等模块
- static interface method calls are not supported at language level 1.6
- 如何在vsc上选择远程miniconda特定的虚拟环境中的Python解释器(4步)
- 神经网络基础知识梳理
- UI设计培训分享:平面广告设计中的文案表达技巧
- python值得报班学习吗