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