android OkHttp的使用

来源:互联网 发布:mac如何使用搜狗 编辑:程序博客网 时间:2024/05/29 16:01

Google在大部分安卓版本中推荐使用HttpURLConnection,但是这个类相比HttpClient实在是太难用,
OkHttp是一个相对成熟的解决方案,据说Android4.4的源码中可以看到HttpURLConnection已经替换成OkHttp实现了。所以我们更有理由相信OkHttp的强大。


在gradle中添加依赖:

compile'com.squareup.okhttp:okhttp:2.4.0'


GET用法:

先声明变量:

privatefinal 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();


取消请求:

finalCallcall = client.newCall(request);

call.cancel();


0 0
原创粉丝点击