前言: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);
- }
- }
复制代码
|