android OkHttp的使用
2016-06-27 15:53
363 查看
Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。
在gradle中添加依赖:
compile
'com.squareup.okhttp:okhttp:2.4.0'
GET用法:
先声明变量:
private
final
OkHttpClient mOkHttpClient = new
OkHttpClient();
创建Request对象:
Request request = new Request.Builder()
.url(URL)
.build();
用client加载数据:
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//非UI线程
if(response.isSuccessful()){
Log.d("---", response.body().string());
}
}
});
接口回调回来的代码是在非UI线程的,因此如果有更新UI的操作记得用Handler或者其他方式。
POST请求:
添加请求参数:
RequestBody
body = new FormBody.Builder()
.add("name", "wanwan")
.add("age", "18")
.build();
将请求参数和header添加到请求中:
Request
request = new Request.Builder()
.url(Common.Str_URL)
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5")
.post(body)
.build();
client加载数据:
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//非UI线程
if(response.isSuccessful()){
Log.d("---", response.body().string());
}
}
});
使用缓存:
File sdcache = getExternalCacheDir();
int cacheSize = 10 * 1024 * 1024; // 10 MiB
mOkHttpClient.setCache(new Cache(sdcache.getAbsoluteFile(), cacheSize));
强制走网络来要求必须请求网络数据
request
= request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build();
取消请求:
final
Call
call
= client.newCall(request);
call.cancel();
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。
在gradle中添加依赖:
compile
'com.squareup.okhttp:okhttp:2.4.0'
GET用法:
先声明变量:
private
final
OkHttpClient mOkHttpClient = new
OkHttpClient();
创建Request对象:
Request request = new Request.Builder()
.url(URL)
.build();
用client加载数据:
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//非UI线程
if(response.isSuccessful()){
Log.d("---", response.body().string());
}
}
});
接口回调回来的代码是在非UI线程的,因此如果有更新UI的操作记得用Handler或者其他方式。
POST请求:
添加请求参数:
RequestBody
body = new FormBody.Builder()
.add("name", "wanwan")
.add("age", "18")
.build();
将请求参数和header添加到请求中:
Request
request = new Request.Builder()
.url(Common.Str_URL)
.header("User-Agent", "OkHttp Headers.java")
.addHeader("Accept", "application/json; q=0.5")
.post(body)
.build();
client加载数据:
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//非UI线程
if(response.isSuccessful()){
Log.d("---", response.body().string());
}
}
});
使用缓存:
File sdcache = getExternalCacheDir();
int cacheSize = 10 * 1024 * 1024; // 10 MiB
mOkHttpClient.setCache(new Cache(sdcache.getAbsoluteFile(), cacheSize));
强制走网络来要求必须请求网络数据
request
= request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build();
取消请求:
final
Call
call
= client.newCall(request);
call.cancel();
相关文章推荐
- 深入理解HTTP Session
- Android使用BroadcastReceiver监听网络状态 推荐
- Android 网络图片查看器
- Unity-WWW发送Http请求
- HttpClient 4 和 HttpClient 3 设置超时
- 网络配置网卡子接口
- HTTP状态码451:基于法律上的原因,我不能向你展示网页内容
- TCP/Protobuf之Protocol Buffers配置指南
- HTTP、TCP/IP协议与socket之间的区别
- 阮一峰的网络日志 » 首页 » 档案
- HTTP幂等性
- Ubuntu12.04 上网静态IP配置方法
- LTE 网络架构
- TCP/Protobuf之Netty学习
- C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)
- linux网络编程常用头文件
- TCP/Protobuf之基础知识准备
- Android使用VideoView播放网络视频,获取网络视频缩略图
- 奇葩问题:HTTP Status 404
- 目前网络上开源的网络爬虫以及一些简介和比较