黑马程序员技术交流社区
标题: 揭秘Android 6.0 之 OkHttp [打印本页]
作者: 柳柳桑 时间: 2015-11-24 08:37
标题: 揭秘Android 6.0 之 OkHttp
前言:Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池。但在Android6.0已经移除了Apache HTTP Client,推荐使用HttpURLConnection,如果还相继续使用俩种HTTP请求方式,OkHttp会是一个不错的选择。
kHttp是一个高效的HTTP库:
>> 支持 SPDY ,共享同一个Socket来处理同一个服务器的所有请求
>> 如果SPDY不可用,则通过连接池来减少请求延时
>> 无缝的支持GZIP来减少数据流量
>> 缓存响应数据来减少重复的网络请求
如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。
使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果您用了 ApacheHttpClient,则OkHttp也提供了一个对应的okhttp-apache 模块
1、准备:
使用Android Studio。
2、注意:
如果使用Eclipse IDE的,请注意将 lib下载完全,使用AndroidStudio的,请使用jcenter依赖
3、新建一个Project:
>>为使用OkHTTP的module添加依赖,修改对应的build.gradle
compile 'com.squareup.okhttp:okhttp:2.5.0'
一、Get请求
利用get方法获取北京的实时天气。注意:每天请求可能获取的天气状况存在差距。如例1-1:
例1-1
- OkHttpClient client = new OkHttpClient();
- String url = "http://wthrcdn.etouch.cn/weather_mini?citykey=101010100";
- Request request = new Request.Builder().url(url).build();
- Response response = client.newCall(request).execute();
- String resp = response.body().string();
复制代码
Request是OkHttp中访问的请求,Builder是辅助类。Response即OkHttp中的响应。
二、Post请求
post提交 Json数据如例1-2:
例1-2
- public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
- OkHttpClient client = new OkHttpClient();
- String post(String url, String json) throws IOException {
- RequestBody body = RequestBody.create(JSON, json);
- Request request = new Request.Builder()
- .url(url)
- .post(body)
- .build();
- Response response = client.newCall(request).execute();
- f (response.isSuccessful()) {
- return response.body().string();
- } else {
- throw new IOException("Unexpected code " + response);
- }
- }
复制代码
三、Post提交键值对
很多时候我们会需要通过POST方式把键值对数据传送到服务器。 OkHttp提供了很方便的方式来做这件事情。如例1-3:
例1-3
- OkHttpClient client = new OkHttpClient();
- String post(String url, String json) throws IOException {
- RequestBody formBody = new FormEncodingBuilder()
- .add("platform", "android")
- .add("version", "23")
- .add("SDK", "24")
- .build();
- Request request = new Request.Builder()
- .url(url)
- .post(body)
- .build();
- Response response = client.newCall(request).execute();
- if (response.isSuccessful()) {
- return response.body().string();
- } else {
- throw new IOException("Unexpected code " + response);
- }
- }
复制代码
作者: 耀阳圣尊 时间: 2015-11-24 09:35
赞一个
作者: doomsday 时间: 2015-11-24 12:28
例1-2第10行代码if少了个i
作者: a784161433 时间: 2015-11-24 21:25
赞赞赞赞赞赞
作者: chenxianzai 时间: 2015-11-24 21:46
不断揭秘,坐等更新6.0的新知识
作者: 听你说 时间: 2015-11-24 21:56
安卓现在更新的好快啊,但是没有iOS快
作者: 夜空的星 时间: 2015-11-24 23:13
Android,我们一起去加油
作者: 董棁 时间: 2015-11-25 08:06
赞一个~~~~~
作者: 王广彬 时间: 2015-11-25 10:39
学习了。。。。。。。
作者: 小鹿 时间: 2015-11-25 19:55
学习真是一点都不能停下来! 不然就OUT了!
作者: ^_^笨和尚^_^ 时间: 2015-11-25 23:35
有点儿难啊
作者: langjun 时间: 2015-11-26 19:37
赞一个。。。好
作者: TommyFen 时间: 2015-11-26 19:58
6.0之后新特性……
作者: 光哥 时间: 2015-11-27 14:07
柳柳桑还是技术高手呢。
作者: 陈同英 时间: 2015-11-27 19:29
好很好。。。。。。。。。
作者: dooorkeeeper 时间: 2015-11-28 19:32
嗯,不错,赞一个!
作者: eddy1820 时间: 2015-11-28 22:52
之後也是要讀安卓,感謝分享
作者: Mr.Cai 时间: 2015-11-28 22:56
学习了,,高大上
作者: 草上飞f 时间: 2015-11-29 00:06
这个必须赞!!!!!
作者: jesssy 时间: 2015-11-30 11:57
学习啦啊
作者: 草上飞f 时间: 2015-11-30 14:12
大赞!!
作者: 蓦然回首102 时间: 2015-11-30 20:28
越努力,越幸运
作者: 东方IOS 时间: 2015-11-30 21:35
赞一个,很好
作者: 东方IOS 时间: 2015-11-30 21:37
赞一个,很好
作者: dengwenjing58 时间: 2015-12-1 09:35
学习学习
作者: 雨与雨伞 时间: 2015-12-4 23:52
掠过!!!!!!!!!!!!!
作者: bulala 时间: 2015-12-5 17:46
学习了
作者: hyl 时间: 2015-12-6 22:04
黑马我来了,加油。
作者: 野生小屌丝 时间: 2015-12-6 22:18
美女赞一个~~~
作者: chenxunlei 时间: 2015-12-9 19:35
赞赞赞赞赞
作者: lizhaoyu612 时间: 2015-12-9 22:23
赞一个。。。。。。。。。
作者: 394925029 时间: 2015-12-9 22:25
灌水{:2_32:}{:2_30:}
作者: 存在着的天空 时间: 2015-12-11 22:02
6.0特性是啥?
作者: Royalblues 时间: 2016-1-12 15:52
赞个
作者: 韦丹艳58 时间: 2016-1-12 22:18
完美!!!!!!!!!!!!!!!!!!!!!!!!!
作者: shihao 时间: 2016-1-23 16:42
赞赞赞赞赞赞
作者: suwen10 时间: 2016-3-6 21:46
好好学习,天天向上
作者: a13979214809 时间: 2016-3-7 18:02
赞一个赞一个
作者: 奥特人 时间: 2016-3-7 21:48
先留言标记一下,以后学到安卓的时候再回过来看看@@@@
作者: 萌萌的_O30IH 时间: 2016-3-7 23:10
学到了,不错
作者: haohuan 时间: 2016-5-23 15:24
在安卓6.0下 会自动转成https
如下
安卓6.0
urlConn=com.android.okhttp.internal.huc.HttpURLConnectionImpl:http://smarthouse.nvdvr.cn:8899/YZJPushServer/AlarmSelectServletPicture?param=...
安卓6.0以下版本
urlConn=com.android.okhttp.internal.http.HttpURLConnectionImpl:http://smarthouse.nvdvr.cn:8899/YZJPushServer/AlarmSelectServletPicture?param=...
这样就不好玩了
作者: Insomnia! 时间: 2016-7-9 17:16
棒极了!
作者: rentianyn 时间: 2016-7-9 21:06
不明觉厉
作者: 回根的落叶 时间: 2016-7-9 22:36
学习了!!
作者: 1243382506 时间: 2016-8-4 19:47
赞赞赞666666666
作者: lynch123 时间: 2016-8-4 21:52
666666666666666666666666666
作者: 王清术 时间: 2016-8-5 21:58
那点黑马币
作者: lynch123 时间: 2016-8-6 22:58
66666666666666666666666666
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |