一: 介绍
Android网络请求框架较多,原生的有HttpClient、HttpUrlConnection;第三方的有okhttp、Volley等。原生的请求较为原始,使用起来比较繁琐。第三方的okhttp是著名公司Square的开源框架,使用方便,有详细的介绍文档。详细信息可以参考square官网http://square.github.io/okhttp/。文档官网:http://square.github.io/okhttp/3.x/okhttp/ 。
二:注意事项
1. okhttp内部依赖于okio,所以导入包的时候okhttp.jar和okio.jar都需要导入
2. okhttp的回调是在子线程里,不能直接在里边更新ui。
三:使用举例
3.1使用说明:
a)首先要构造一个Request,可以是get类型的,只有url地址;也可以是post请求,给Request设置对应的head和body.
b)构造一个OkHttpClient,通过OkHttpClient执行Request请求,可以设置回调Callback
c) CallBack里的回调:
onFailure(Call paramCall, IOException paramIOException);
onResponse(Call paramCall, Response paramResponse);
3.2:
a) 发起一个get请求和post请求的示例
/**
* @functions: 执行一个get请求,可以设置一些超时 代理
* @param url: url地址
* @param callback :响应的回调
*/
public void dealGet(String url , ICall iCall){
this.iCall = iCall ;
//构造请求
Request request = new Request.Builder().url(url).build();
runRequest(request);
}
/**
* 登录接口的测试
* @param username 用户名
* @param password 密码
* @param httpCallback 请求回调
*/
public void dealPostlogin(String username, String password , ICall iCall) {
if (iCall == null) {
return;
}
this.iCall = iCall;
if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
return;
}
FormBody.Builder bodyBuilder = new FormBody.Builder();
bodyBuilder.add("grant_type", "password");
bodyBuilder.add("username", username);
bodyBuilder.add("password", password);
FormBody body = bodyBuilder.build();
//头部信息
Builder mBuilder = new Request.Builder();
mBuilder.url("https://oauth.haoshitong.com/oauth2/token");
mBuilder.header("Authorization", getAuthorization());
mBuilder.post(body);
Request request = mBuilder.build();
runRequest(request);
}
private void runRequest(Request request){
OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
//执行异步请求
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call arg0, Response arg1) throws IOException {
Message message = new Message();
message.what = MSG_RESPONE;
message.obj = arg1;
handler.sendMessage(message);
}
@Override
public void onFailure(Call arg0, IOException arg1) {
Message message = new Message();
message.what = MSG_FAILURE;
message.obj = arg1;
handler.sendMessage(message);
}
});
}