您的位置:首页 > 理论基础 > 计算机网络

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: