Android异步网络请求--AsyncHttpClient
Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-async-http这个库可以大大的简化操作,它是基于Apache’s HttpClient ,所有的请求都是独立在UI主线程之外,通过回调方法处理请求结果,采用android Handler message 机制传递信息。
零用钱里网络请求使用的便是这种异步网络请求,查阅了一些资料做了总结。
android-async-http 开源框架可以使我们轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单。
以往我们在安卓上做项目,比如要下载很多图片、网页或者其他的资源,多数开发者会选择一个线程一个下载任务这种模型,因为安卓自带的 AndroidHttpClient 或者 java 带的 java.net.URL ,默认都是阻塞式操作。这种模型效率不高,对并发要求高的 APP 来讲,并不适用。
AsyncHttpClient 作为 android-async-http 框架的一个核心应用类,使用简单,可以处理文本、二进制等各种格式的 web 资源。下面
AsyncHttpClient, RequestParams ,AsyncHttpResponseHandler三个类使用方法
AsyncHttpClient
public class AsyncHttpClient extends java.lang.Object
该类通常用在android应用程序中创建异步GET, POST, PUT和DELETE HTTP请求,请求参数通过RequestParams实例创建,响应通过重写匿名内部类 ResponseHandlerInterface的方法处理。
AsyncHttpClient client = new AsyncHttpClient(true, HostConstant.getHttpPort(), HostConstant.getHttpsPort());
请求方法
1. AsyncHttpClient.post(arg0,arg1,arg2);
2. AsyncHttpClient.get(arg0,arg1,arg2);
arg0:是你post请求的url
arg1:是要发送给服务器的数据 ,他是
RequestParams
public class RequestParams extends java.lang.Object
用于创建AsyncHttpClient实例中的请求参数
RequestParams params = new RequestParams(); params.put("username", "xiaowen"); params.put("password", "123456");
AsyncHttpResponseHandler
用于拦截和处理由AsyncHttpClient创建的请求。
AsyncHttpResponseHandler handler = new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { } };
onFailure()
如果请求失败了,就会执行该方法,其余方法就都不执行了,用于提示用户网络出现故障
onSuccess()
是请求成功后,服务器就会返回statusCode,headers以及responseBody,通过判断statusCode和解析respinseBody来获取网络返回数据
查看该类的源代码还包括onStart()
,onFinish()
,onRetry
等方法。
onStart()
方法是开始发送请求的时候执行的,一般是把progressDialog放在这里面显示,提示用户等待
onFinish()
当发送请求成功后,就执行onFinish()
零用钱网络请求代码分析
1.请求处理:
PMHttpResponseHandler handler = new PMHttpResponseHandler() { @Override public void onRequestCompletion(Map responseMap, Object tag) { } @Override public Object getRequestName() { } @Override public PMRequestQueue.Request getRequest() { } };
PMHttpResponseHandler是AsyncHttpResponseHandler的子类,在PMHttpResponseHandler中包含抽象方法onRequestCompletion()
, getRequestName()
, getRequest()
,并且实现了父类的 onSuccess()
和 onFailure()
方法
2.发送请求:
PMNetworkKit.getInstance(handler).post(url,param);
更多相关文章
- Android(安卓)View总结
- android Edittext输入修改软键盘并关闭软键盘
- Android之view虚线
- Android(安卓)App Widget中如何调用RemoteView中的函数
- Android(安卓)ActionBar的源代码分析(一)
- Android中获取网络图片的三种方法
- SimpleCropView 裁剪图片
- Android调用系统自带的设置界面
- Android(安卓)Kotlin 开发--偶遇Rxjava、Retrofit进行网络请求