Android开发——OKHttp用法详解
本文主要讲述了OKHttp类库的发送Get请求和Post请求的用法,现在整理出来分享给Android程序员兄弟们,希望给他们的开发工作带来帮助。
官网对OKHttp的介绍还是比较详细,英文好的同学可以直接看官网的内容。使用OKHttp我们就需要OKHttp的jar包,同时由于OKHttp依赖于Okio,我们也需要下载Okio的jar包。这两个准备工作做好了就可以开始了。
一、发送Get请求
Request是OKHttp访问的请求,Callback是回调,有两种调用方式,一种是call.execute,这种方式不会开启新的线程,要在android中使用这个需要自己开启一个新线程,然后在线程中调用这个东西,这样反而麻烦了,所以个人推荐使用call.enqueue,call.enqueue会开启一个新的线程,在新线程中调用网络请求。这样的话我们就得通过Handler来与androidUI交互了。
okHttpClient=newOkHttpClient();
request=newRequest.Builder().url(HTTPURL).build();
Callcall=okHttpClient.newCall(request);
//开启异步线程访问网络
call.enqueue(newCallback(){
@Override
publicvoidonResponse(Responseresponse)throwsIOException{
Stringres=response.body().string();
Messagemsg=newMessage();
msg.what=REFRESHDATA;
msg.obj=res;
mHandler.sendMessage(msg);
}
@Override
publicvoidonFailure(Requestarg0,IOExceptionarg1){
}
});
二、发送POST请求
发送POST请求,一种是提交JSON数据:
MediaTypeJSON=MediaType.parse("application/json;charset=utf-8");
RequestBodybody=RequestBody.create(JSON,
"{/"username/":/"lisi/",/"nickname/":/"李四/"}");
Requestrequest=newRequest.Builder().url(HTTPURL).post(body).build();
//后面的调用与GET相同
还有一种是提交键值对:
RequestBodyformBody=newFormEncodingBuilder()
.add("username","lisi").add("nickname","李四").build();
Requestrequest=newRequest.Builder().url(HTTPURL).post(formBody)
.build();
总结
其实OKHttp相对于HttpURLConnection已经简单了许多,但是我还是觉得麻烦,而且官方亦不建议我们创建多个OkHttpClient实例,于是又对它进行了一层简单的封装。
importjava.io.IOException;
importjava.util.Map;
importjava.util.Set;
importjava.util.concurrent.TimeUnit;
importcom.squareup.okhttp.Callback;
importcom.squareup.okhttp.OkHttpClient;
importcom.squareup.okhttp.Request;
importcom.squareup.okhttp.Response;
/**
*OKHttp封装工具类
*
*@authorwangsong
*
*2015-10-9
*/
publicclassOKHttpUtils{
privatefinalstaticOkHttpClientM_OK_HTTP_CLIENT=newOkHttpClient();
static{
M_OK_HTTP_CLIENT.setConnectTimeout(30,TimeUnit.SECONDS);
}
/**
*不开启异步线程
*
*@authorwangsong2015-10-9
*@paramrequest
*@return
*@throwsIOException
*/
publicstaticResponseexecute(Requestrequest)throwsIOException{
returnM_OK_HTTP_CLIENT.newCall(request).execute();
}
/**
*开启异步线程访问,访问结果自行处理
*
*@authorwangsong2015-10-9
*@paramrequest
*@paramresponseCallback
*/
publicstaticvoidenqueue(Requestrequest,CallbackresponseCallback){
M_OK_HTTP_CLIENT.newCall(request).enqueue(responseCallback);
}
/**
*开启异步线程访问,不对访问结果进行处理
*
*@authorwangsong2015-10-9
*@paramrequest
*@paramresponseCallback
*/
publicstaticvoidenqueue(Requestrequest){
M_OK_HTTP_CLIENT.newCall(request).enqueue(newCallback(){
@Override
publicvoidonResponse(Responsearg0)throwsIOException{
}
@Override
publicvoidonFailure(Requestarg0,IOExceptionarg1){
}
});
}
/**
*为HttpGet请求拼接一个参数
*
*@authorwangsong2015-10-9
*@paramurl
*@paramname
*@paramvalue
*/
publicstaticStringjointURL(Stringurl,Stringname,Stringvalue){
returnurl+"?"+name+"="+value;
}
/**
*为HttpGet请求拼接多个参数
*
*@authorwangsong2015-10-9
*@paramurl
*@paramname
*@paramvalue
*/
publicstaticStringjointURL(Stringurl,Map<String,String>values){
StringBufferresult=newStringBuffer();
result.append(url).append("?");
Set<String>keys=values.keySet();
for(Stringkey:keys){
result.append(key).append("=").append(values.get(key)).append("&");
}
returnresult.toString().substring(0,result.toString().length()-1);
}
}
本文涉及到的工具类下载地址https://github.com/lenve/OKHttpUtils
本文转载至:http://www.mobile-open.com/2015/85023.html