黑马程序员技术交流社区

标题: 揭秘Android 6.0 之 OkHttp [打印本页]

作者: 柳柳桑    时间: 2015-11-24 08:37
标题: 揭秘Android 6.0 之 OkHttp

揭秘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
  1. OkHttpClient client = new OkHttpClient();
  2. String url = "http://wthrcdn.etouch.cn/weather_mini?citykey=101010100";
  3. Request request = new Request.Builder().url(url).build();
  4. Response response = client.newCall(request).execute();
  5. String resp = response.body().string();
复制代码


  Request是OkHttp中访问的请求,Builder是辅助类。Response即OkHttp中的响应。


二、Post请求
  post提交 Json数据如例1-2:
1-2
  1. public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  2. OkHttpClient client = new OkHttpClient();
  3. String post(String url, String json) throws IOException {
  4.     RequestBody body = RequestBody.create(JSON, json);
  5.     Request request = new Request.Builder()
  6.             .url(url)
  7.             .post(body)
  8.             .build();
  9.     Response response = client.newCall(request).execute();
  10.     f (response.isSuccessful()) {
  11.         return response.body().string();
  12.     } else {
  13.         throw new IOException("Unexpected code " + response);
  14.     }
  15. }
复制代码

三、Post提交键值对    
  很多时候我们会需要通过POST方式把键值对数据传送到服务器。 OkHttp提供了很方便的方式来做这件事情。如例1-3:
1-3
  1. OkHttpClient client = new OkHttpClient();
  2. String post(String url, String json) throws IOException {

  3.     RequestBody formBody = new FormEncodingBuilder()
  4.             .add("platform", "android")
  5.             .add("version", "23")
  6.             .add("SDK", "24")
  7.             .build();

  8.     Request request = new Request.Builder()
  9.             .url(url)
  10.             .post(body)
  11.             .build();

  12.     Response response = client.newCall(request).execute();
  13.     if (response.isSuccessful()) {
  14.         return response.body().string();
  15.     } else {
  16.         throw new IOException("Unexpected code " + response);
  17.     }
  18. }
复制代码


作者: 耀阳圣尊    时间: 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
chenxianzai 发表于 2015-11-24 21:46
不断揭秘,坐等更新6.0的新知识

那点黑马币
作者: lynch123    时间: 2016-8-6 22:58
66666666666666666666666666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2