okHttp的使用
优势
- 谷歌官方在6.0以后在android sdk已经移除了httpClient,加入我们okHttp
- 支持
SPDY
,允许连接同一主机的所有请求分享一个socket。 如果SPDY不可用,会使用连接池减少请求延迟。 使用GZIP压缩下载内容
,且压缩操作对用户是透明的。 利用响应缓存来避免重复的网络请求
。 当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。 如果你的服务端有多个IP地址,当第一个地址连接失败时,OKHttp会尝试连接其他的地址
,这对IPV4和IPV6以及寄宿在多个数据中心的服务而言,是非常有必要的。
因此使用 OkHttp 作为替代是好的选择.
SPDY
SPDY(读作“SPeeDY”)是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强
如何用
依赖方式
gradle中加入`compile 'com.squareup.okhttp:okhttp:2.6.0'`即可
离线的方式
通过maven仓库搜索下载okhttp.jar和okio.jar使用
get请求
1.同步的请求
//1.创建OkHttpClient实例对象
OkHttpClient okHttpClient = new OkHttpClient();
//home
// ?index=0==>参数
String url = Constants.URLS.BASEURL + "home?index=0";
//2.创建一个请求
Request request = new Request.Builder()
.get()//get方法
.url(url)//对应的url
.build();
//3.发起请求
Response response = okHttpClient.newCall(request).execute();
//4.取出结果
String resultJsonString = response.body().string();
2.异步的请求
//1.创建OkHttpClient实例对象
OkHttpClient okHttpClient = new OkHttpClient();
//home
// ?index=0==>参数
String url = Constants.URLS.BASEURL + "home?index=0";
//2.创建一个请求
Request request = new Request.Builder()
.get()//get方法
.url(url)//对应的url
.build();
//3.发起请求
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
//请求成功
}
@Override
public void onResponse(Response response) throws IOException {
//请求失败
}
});
参数的拼接
public static String getUrlParamsByMap(Map<String, Object> map) {
if (map == null) {
return "";
}
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, Object> entry : map.entrySet()) {
sb.append(entry.getKey() + "=" + entry.getValue());
sb.append("&");
}
String s = sb.toString();
if (s.endsWith("&")) {
s = s.substring(0, s.length() - 1);
}
return s;
}