异步GET请求
public void asynGet(View view) {
//1.构建一个最简单的OkHttpClient
mOkHttpClient = new OkHttpClient();
//2.构建一个Request,指明请求方法、URL等信息
Request request = new Request.Builder()
.get()//默认为GET请求,可省略
.url(url_get)
.build();
//3. 开始请求网络,并且回调请求结果(注意:回调发生在子线程)
mOkHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
toast("asynGet:请求失败了");
log(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
toast("asynGet:请求成功了");
log("asynGet\n" + response.body().string());
}
});
}
异步POST
post与get不同的就是要要创建RequestBody,
并传进Request中,
同样onResponse回调不是在UI线程。
public void asynPost(View view) {
//1.构建一个最简单的OkHttpClient
mOkHttpClient = new OkHttpClient();
//2.构建一个Request,指明请求参数、方法、URL等信息
//2.1构建post表单提交参数
FormBody formBody = new FormBody.Builder()
.add("key", key)
.add("pno", "3")
.build();
//2.2构建请求,指明请求参数、URL
Request request = new Request.Builder()
.post(formBody)
.url(url_post)
.build();
//3. 开始请求网络,并且回调请求结果(注意:回调发生在子线程)
mOkHttpClientCach.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
toast("asynPost:请求失败了");
log(e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
toast("asynPost:请求成功了");
log("asynPost\n" + response.body().string());
}
});
}
配置okHttpClient
private void initOkHttp() {
// 1.拦截器
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
//拿到请求request
Request request = chain.request();
//在执行请求之前,你可以统一在这里做些事情
Log.e("cach", "request=" + request);
//执行请求,并且的得到响应response
Response response = chain.proceed(request);
//在执行完请求之后,你可以统一在这里做些事情
Log.e("cach", "response=" + response);
String cacheControl = request.cacheControl().toString();
if (TextUtils.isEmpty(cacheControl)) {
cacheControl = "public, max-age=60";
}
return response.newBuilder()
.header("Cache-Control", cacheControl)
.removeHeader("Pragma")
.build();
}
};
//2.构建一个Cache
//2.1缓存目录
File sdcache = new File(getFilesDir(), "cccccccc");
//2.2缓存大小
int cacheSize = 10 * 1024 * 1024;
okhttp3.Cache cache = new okhttp3.Cache(sdcache, cacheSize);
//3.构建一个复杂点的OkHttpClient(配置上面的拦截器和cache)
mOkHttpClientCach = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.SECONDS)
.writeTimeout(3, TimeUnit.SECONDS)
.readTimeout(3, TimeUnit.SECONDS)
.cache(cache)//设置缓存
.addNetworkInterceptor(interceptor)//设置拦截器★★★一定要用addNetworkInterceptor,不能用addInterceptor
.build();
}
使用 Okhttp 下载文件和更新进度条
[使用 Okhttp 下载文件和更新进度条](可用)(http://www.jianshu.com/p/3b269082cbbb)
记得添加访问网络、读写存储卡的权限