Android网络请求库android-async-http介绍
Android网络请求库:android-async-http开源框架
之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—android-async-http库。
1.概念:
这个网络请求库是基于ApacheHttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通过回调方法(匿名内部类)处理请求结果。
2.特征:
(1).处理异步Http请求,并通过匿名内部类处理回调结果
**(2).**Http异步请求均位于非UI线程,不会阻塞UI操作。
(3).通过线程池处理并发请求处理文件上传、下载,响应结果自动打包JSON格式。
3.相应的核心类的介绍:
(1).AsyncHttpResponseHandler:请求返回处理成功、失败、开始、完成等自定义的消息的类。
(2).BinaryHttpResponseHandler:AsyncHttpResponseHandler的子类。该类是一个字节流返回处理的类。用于处理图片等。
(3).JsonHttpResponseHandler:AsyncHttpResponseHandler的子类。这是一个服务器与客户端之间用Json数据交流时使用的类。客户端请求服务器的参数是Json数据类型的,服务器返回给客户端的数据也是Json数据类型的。
(4).RequestParams:封装参数处理的类。将客户端请求的参数封装在该类中。
(5).AsyncHttpClient:异步客户端请求的类。
(6).SyncHttpClient:同步客户端请求的类。AsyncHttpClient的子类。
注意:HttpUtil这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。需要添加android-async-http-1.4.7.jar文件包。
代码如下:
(1).AsyncJsonUtilGet.java
packagecom.chengdong.su.util.get;
importorg.apache.http.Header;
importorg.json.JSONException;
importorg.json.JSONObject;
importandroid.content.Context;
importandroid.widget.Toast;
importcom.loopj.android.http.JsonHttpResponseHandler;
importcom.loopj.android.http.RequestParams;
/**
*异步请求服务器
*
*@authorscd
*
*/
publicclassAsyncJsonUtilGet{
privatestaticfinalStringURL="";
privateContextmContext;
/**
*构造方法
*
*@parammContext
*/
publicAsyncJsonUtilGet(ContextmContext){
super();
this.mContext=mContext;
}
/**
*邮箱注册
*/
publicvoidemailRegister(Stringemail,Stringpassword,Stringusername){
RequestParamsparams=newRequestParams();
JSONObjectjsonObject=newJSONObject();
try{
jsonObject.put("email",email);
jsonObject.put("password",password);
jsonObject.put("username",username);
}catch(JSONExceptione){
e.printStackTrace();
}
params.put("jsonObject",jsonObject);
//get请求方式
HttpUtil.get(URL,params,newJsonHttpResponseHandler(){
@Override
publicvoidonFailure(intstatusCode,Header[]headers,
Throwablethrowable,JSONObjecterrorResponse){
super.onFailure(statusCode,headers,throwable,errorResponse);
Toast.makeText(mContext,"Registerfailed!",Toast.LENGTH_SHORT)
.show();
}
@Override
publicvoidonSuccess(intstatusCode,Header[]headers,
JSONObjectresponse){
StringerrorCode=response.optString("ErrorCode");
//表示请求成功
if(errorCode.equals("0")){
Toast.makeText(mContext,"注册成功",Toast.LENGTH_LONG).show();
//response:返回的数据都在这个参数中,根据业务要求进行实现功能
}else{
super.onSuccess(statusCode,headers,response);
}
}
});
}
}
(2).HttpUtil.java工具类:注:需要添加jar包
packagecom.chengdong.su.util.get;
importjava.io.IOException;
importjava.io.UnsupportedEncodingException;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.net.URLConnection;
importjava.util.List;
importjava.util.Map;
importjava.util.Set;
importandroid.content.Context;
importandroid.net.ConnectivityManager;
importandroid.net.NetworkInfo;
importcom.loopj.android.http.AsyncHttpClient;
importcom.loopj.android.http.AsyncHttpResponseHandler;
importcom.loopj.android.http.BinaryHttpResponseHandler;
importcom.loopj.android.http.JsonHttpResponseHandler;
importcom.loopj.android.http.RequestParams;
publicclassHttpUtil{
publicstaticfinalStringSTATUS_NETWORK="network_available";
privatestaticAsyncHttpClientclient=newAsyncHttpClient();
static{
client.setTimeout(11000);
}
publicstaticvoidget(StringurlString,AsyncHttpResponseHandlerres){
client.get(urlString,res);
}
publicstaticvoidget(StringurlString,RequestParamsparams,
AsyncHttpResponseHandlerres){
client.get(urlString,params,res);
}
publicstaticvoidget(StringurlString,JsonHttpResponseHandlerres)
{
client.get(urlString,res);
}
publicstaticvoidget(StringurlString,RequestParamsparams,
JsonHttpResponseHandlerres)
{
client.get(urlString,params,res);
}
publicstaticvoidget(StringuString,BinaryHttpResponseHandlerbHandler)
{
client.get(uString,bHandler);
}
publicstaticAsyncHttpClientgetClient(){
returnclient;
}
publicstaticbooleanisNetworkConnected(Contextcontext){
if(context!=null){
ConnectivityManagermConnectivityManager=(ConnectivityManager)context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfomNetworkInfo=mConnectivityManager
.getActiveNetworkInfo();
if(mNetworkInfo!=null){
returnmNetworkInfo.isAvailable();
}
}
returnfalse;
}
//从UrlConnection中获取文件名称
publicstaticStringgetFileName(Stringurl){
StringfileName=null;
booleanisOK=false;
try{
URLmyURL=newURL(url);
URLConnectionconn=myURL.openConnection();
if(conn==null){
returnnull;
}
Map<String,List<String>>hf=conn.getHeaderFields();
if(hf==null){
returnnull;
}
Set<String>key=hf.keySet();
if(key==null){
returnnull;
}
for(Stringskey:key){
List<String>values=hf.get(skey);
for(Stringvalue:values){
Stringresult;
try{
result=value;
intlocation=result.indexOf("filename");
if(location>=0){
result=result.substring(location
+"filename".length());
result=java.net.URLDecoder
.decode(result,"utf-8");
result=result.substring(result.indexOf("\"")+1,
result.lastIndexOf("\""));
fileName=result
.substring(result.indexOf("=")+1);
isOK=true;
}
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
}
if(isOK){
break;
}
}
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
returnfileName;
}
}
开源之家介绍:http://open.jb51.net/project/app-framework/android-async-http.html