前言
从开始使用OkHttp已经很久了,它是一个很nice的网络框架,其功能强大,可进行失败重连,在连接中出问题时自动恢复。最近在复习的时候学了它的源码,以下主要是写它的使用和源码学习。
使用
- GET请求
//异步请求
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder()
.url("url")
.addHeader("headerName","headerValue")//添加头部信息
.build();
Call call=client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
//请求失败
}
//此时的OnResponse方法也不是在UI线程中
@Override
public void onResponse(Response response) throws IOException {
//请求成功
}
});
//同步请求,需放在子线程中
OkHttpClient mOkHttpClient=new OkHttpClient();
final Request request=new Request.Builder().url("url")
.build();
Call call=mOkHttpClient.newCall(request);
try {
Response response=call.execute();
if (response.isSuccessful()){
response.message();
response.code();
response.body().string();
}
} catch (IOException e) {
e.printStackTrace();
}
- POST请求
//异步请求
OkHttpClient client=new OkHttpClient();
FormEncodingBuilder builder=new FormEncodingBuilder();
builder.add("psw","123");//参数
builder.add("name","asendi");
Request request=new Request.Builder()
.url("url")
.post(builder.build())
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
}
//此时的OnResponse方法也不是在UI线程中
@Override
public void onResponse(Response response) throws IOException {
}
});
- 上传文件
OkHttpClient client=new OkHttpClient();
File file=new File(path);
RequestBody fileBody=RequestBody.create(MediaType.parse("File/*"), file);
Request request=new Request.Builder()
.url("url")
.post(fileBody)
.build();
- 上传文件+带参数
OkHttpClient client=new OkHttpClient();
File file=null;
RequestBody fileBody=
RequestBody.create(MediaType.parse("application/octet-stream"), file);
MultipartBuilder build=new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("username", "asendi")//添加参数
.addFormDataPart("uId", "1")
.addPart(Headers