A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳柳桑 黑马粉丝团   /  2015-11-24 08:37  /  8272 人查看  /  47 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


揭秘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. }
复制代码

47 个回复

倒序浏览
赞一个
回复 使用道具 举报
例1-2第10行代码if少了个i
回复 使用道具 举报
赞赞赞赞赞赞
回复 使用道具 举报
不断揭秘,坐等更新6.0的新知识
回复 使用道具 举报
安卓现在更新的好快啊,但是没有iOS快   
回复 使用道具 举报
Android,我们一起去加油
回复 使用道具 举报
董棁 中级黑马 2015-11-25 08:06:00
8#
赞一个~~~~~
回复 使用道具 举报
学习了。。。。。。。
回复 使用道具 举报
小鹿 中级黑马 2015-11-25 19:55:35
10#
学习真是一点都不能停下来!   不然就OUT了!
回复 使用道具 举报
有点儿难啊
回复 使用道具 举报
赞一个。。。好
回复 使用道具 举报
6.0之后新特性……
回复 使用道具 举报
光哥 中级黑马 2015-11-27 14:07:48
14#
柳柳桑还是技术高手呢。
回复 使用道具 举报
好很好。。。。。。。。。
回复 使用道具 举报
嗯,不错,赞一个!
回复 使用道具 举报
之後也是要讀安卓,感謝分享
回复 使用道具 举报
Mr.Cai 中级黑马 2015-11-28 22:56:09
18#
学习了,,高大上
回复 使用道具 举报
这个必须赞!!!!!
回复 使用道具 举报
jesssy 中级黑马 2015-11-30 11:57:29
20#
学习啦啊
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马