基本用法
1.异步GET请求
Request.Builder requestBuilder = new Request.Builder().url("");
requestBuilder.method("GET",null);
Request request = requestBuilder.build();
OkHttpClient mOkHttpClient = new OkHttpClient();
Call mcall = mOkHttpClient.newCall(request);
mcall.enqueue(new Callback(){});
2.异步POST请求
//多了用FormBody来封装请求的参数,并传递个Request
RequestBody formBody = new FormBody.Builder().add("key","value").build();
Request request = new Request.Builder().url().post(formBody).build();
OkHttpClient mOkHttpClient = new OkHttpClient();
Call mcall = mOkHttpClient.newCall(request);
mcall.enqueue(new Callback(){});
3.异步上传文件
上传文件本身也是一个POST请求,首先定义上传文件类型
public static final MediaType MEDIA_TYPE_MARKDOWN =
MediaType.parse("text/x-markdown;charset=utf-8");
String filepath = "";
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
filepath = Environment.getExternalStorageDirectory().getAbsolutePath();
} else{
return;
}
File file = new File(filepath,"wangshu.txt");
Request request = new Request.Builder().url("")
.post(RequestBody.create(MEDIA_TYPE_MARKDOWN,file)).build();
mOkHttpClient.newCall(request).enqueue(new Callback(){});
4.异步下载文件
5.异步上传Multipart文件
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
mOkHttpClient = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("title","wangshu")
.addFormDataPart("image","wang.png",RequestBody.create(MEDIA_TYPE_PNG,new File("/sdcard/wangshu.png"))).build();
Request request = new Request.Builder()
.header("","")
.url()
.post(requestBody).build();
mokHttpClient.newCall(request).enqueue(new Callback(){});
6.设置超时时间和缓存
OkHttp3支持设置连接,写入和读取的超时时间
OkHttpClient.Builder builder = new OkHttpClient.Bulider()
.connectTimeout(15,TimeUnit.SECONDS)
.writeTimeout(20,TimeUnit.SECONDS)
.readTimeout(20,TimeUnit.SECONDS)
.cache(new Cache(sdcache.getAbsoluteFile(),cacheSize));
mOkHttpClient = builder.build();
7.取消请求
使用call.cancel()可以立即停止一个正在执行的call
OkHttp请求流程
创建请求Call,异步的请求创建线程池处理请求,同步的请求通过拦截器发送请求,接着HttpEngine发送请求,有缓存从缓存系统获取Response,无缓存去网络请求获得Response。
网友评论