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

相关推荐