android 网络交互
一、
在Android中,发送和处理http请求实在太常见了,以至于我们经常需要写这方面的代码。
Android中网络交互的代码不能在UI线程中执行,只能在额外的子线程中执行。
我一般的做法是通过创建子线程和Handler来完成,网络交互的代码在线程中执行,交互的结果通过Handler反馈给UI线程。
new Thread(){ public void run() { //http请求的发送与接收代码 //将操作接口通过handler通知页面 }; }.start();
还有一种交互的方式是通过回调函数callback来实现。
二、
发现了一个网络交互的库:android-async-http,前段时间尝试着用了一下,感觉挺棒的。
这个库,他网络交互的代码都已经封装在里面,通常一个http请求只需要简单的几行代码即可完成。
它与UI交互的方式是通过回调函数callback来实现,内容比较完成,其中网络交互的开始,结束,成功,失败,进度等等都可以通过callback得到
第一步:得到httpclient对象
AsyncHttpClient client = new AsyncHttpClient(); //这一步可以我们自己封装成单例模式
第二步:发送get请求
client.get(url.toString(), responseHandler);
//这个地方的responseHandler,假如我们需要得到这个请求的相关返回值,就需要重写实现这个类,并且重写其中的方法;假如不需要的话,使用null代替即可 JsonHttpResponseHandler responseHandler = new JsonHttpResponseHandler(){ public void onSuccess(int statusCode, org.apache.http.Header[] headers, org.json.JSONObject response) { super.onSuccess(statusCode, headers, response); }; public void onFailure(int statusCode, org.apache.http.Header[] headers, Throwable throwable, org.json.JSONObject errorResponse) { super.onFailure(statusCode, headers, throwable, }; @Override public void onFinish() { super.onFinish(); };
//还有很多其他可以重写的方法,基本包括交互过程中所有的状态
}
三、
觉得这个库写的很棒,各种高大上,简单的读了一下其中的源码,他在github上是开源的。
每一个请求,都被封装在一个runnable中,执行这个请求的时候,ExecutorService.submit(runnable)将该runnable放在线程池中执行
根据用户提供的网络路径和键值对,创建HttpUriRequest对象,通过HttpResponse response = client.execute(HttpUriRequest, httpContext)来执行网络操作
HttpUriRequest,它是一个接口,它有多个子类,其中包含HttpEntityEnclosingRequestBase;HttpEntityEnclosingRequestBase包含setURI()和setEntity(HttpEntity entity)
的方法。
请求发送之后,该方法会返回一个叫RequestHandle的对象,通过该对象的cancel方法,可以实现取消请求的方法
这里只是对库里面的主要方法进行描述,其中还有很多其他的内容,比如gzip,比如base64等等
四、
包含的功能: