首页 > 代码库 > Andorid Async-HttpClient解读
Andorid Async-HttpClient解读
Async-httpclient是一个用于Android应用程序开发的http访问开源框架,开源在GitHub上,由于今天在GitHub上没有看到下载地址,我这里提供一个下载地址,是之前从GitHub上下载的,版本是V1.4.5。GitHub上还是有很多开发人员提供了http访问的封装类,但是个人觉得Async-httpclient写的很不错,所以就总结下该开源包中的代码结构和调用方式。
Async-httpclient开源包中提供http的同步和异步访问,http的get、post、set、delete等方法,在调用http访问接口时针对传入不同的回调接口,返回数据也进行了不同的封装,待仔细阅读源码之后,将会明了。
当解开资源包之后,?\library\src\main\java\com\loopj\android\http该目录下就是作者写的源码了,就只有27个类,这里建议将?\library\src\main\java\目录下的文件夹com拷贝至Android工程的根目录下,并将其设置为“use as source folder”,这样在写调用例子的时候,就能去边看源码边写代码了。
源码包中主要的类有
AsyncHttpClient.java异步http访问类
SyncHttpClient.java同步http访问类
AsyncHttpRequest.java继承Runnable对象,真实访问http的线程
ResponseHandlerInterface.javahttp访问回调接口,有很多子类,分别对返回数据进行了封装
主要就是这个4大类,其余的还有https的证书自定义类、http重定向、base64、cookie的保存、http访问重试次数的设定等等。这些需要的时候可以添加。
在阅读源码时,ResponseHandlerInterface的子类众多,体验了一把什么是重载和覆写!这才是面向对象编程的思想。接下来一个简单的例子能看出使用此开源包的代码之简洁,可以少写很多不必要的重复代码。
ResponseHandlerInterface的子类关系如下:
在实际的开发中建议http访问实例写成单例。
public class MainActivity extends Activity { private static AsyncHttpClient mHttpClient = new AsyncHttpClient(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getData() ; } public void getData(){ mHttpClient.get("http://www.baidu.com", responseHandler) ; } AsyncHttpResponseHandler responseHandler = new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers,byte[] responseBody) { for(Header header :headers){ Log.e("onSuccess","" + header.getName() + " = " + header.getValue()) ; } Log.e("onSuccess","statusCode = " + statusCode + ", responseBody = " + new String(responseBody)) ; } @Override public void onFailure(int statusCode, Header[] headers,byte[] responseBody, Throwable error) { for(Header header :headers){ Log.e("onFailure","" + header.getName() + " = " + header.getValue()) ; } Log.e("onFailure","statusCode = " + statusCode + " ,responseBody = " + responseBody) ; } } ; }