Volley简介和特点
Volley是Google I/O 2013上官方发布的一款Android平台上的网络通信库。Volley特别适合数据量不大但是通信频繁的场景。
下载地址:https://github.com/mcxiaoke/android-volley
Volley有以下特点:
- 能使网络通信更快,更简单,更健壮。
- Get、Post网络请求及网络图像的高效异步处理请求
- 可以对网络请求进行排序优先级管理
- 网络请求的缓冲
- 多级别取消请求
- 和Activity生命周期的联动(Activity结束时同时取消所有的网络请求)
缺点:Volley不适合大数据和流媒体的网络请求,如大文件、视频的下载
Android-async-http简介和特点
Async-http是一款国外的开源框架,具有高效的网络数据请求,网络文件下载和上传。
下载地址:https://github.com/loopj/android-async-http
Async-http有以下特点:
- 清晰的网络请求回调
- 请求使用ThreadPool,限制并发资源使用情况
- Get/Post基于参数构建使用(RequestParams),方便
- Multipart文件上传,大数据上传下载
- 自动智能请求重试,优化了质量不一的移动连接
- 内置响应解析成Json,使用JsonHttpResponseHandle
- 持久化cookie存储,保存cookie到你的应用程序的SharedPreference
- 二进制文件(图片、流媒体)的下载,使用BinaryHttpResponseHandler
Volley的Post和Get请求
1、建立请求 首先建立队列,将请求添加到请求队列里
2、进行相应的Get和Post请求,请求结果在回调里获取解析
Volley有自己的请求队列管理机制,可以控制每个请求的建立与取消,这样可以做到随时控制某个请求在什么时候结束,与Activity生命周期关联,防止无谓的请求。
public RequestQueue getGlobalQuere(){
/*全局的请求队列,应该放在Application中*/
if(mGlobalQueue == null){
mGlobalQueue = Volley.newRequestQueue(getApplicationContext());
}
return mGlobalQueue;
}
public static final String REQUEST_POST_TAG_1 = "rquest_post_tag_1";
private void volley_Post() {
String urlMain = "";
StringRequest request = new StringRequest(Method.POST, urlMain,
new Listener<String>() {
@Override
public void onResponse(String response) {
/*服务器返回的数据*/
Log.d("volley_Post", response);
}
},
new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("volley_Post", "网络连接失败:"+error.getMessage());
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
/*post请求中参数的添加*/
Map<String, String> param = new HashMap<String, String>();
param.put("param1", "value1");
param.put("param2", "value2");
return param;
}
};
request.setTag(REQUEST_POST_TAG_1); /*可以通过tag随时取消网络请求*/
getGlobalQuere().add(request); /*把请求添加到全局的请求队列中*/
}
public static final String REQUEST_GET_TAG_1 = "rquest_get_num_1";
private void volley_Get() {
String url = "";
StringRequest request = new StringRequest(Method.GET, url,
new Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("volley_Get", response);
}
},
new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("volley_Get", "网络请求失败");
}
});
request.setTag(REQUEST_GET_TAG_1);
getGlobalQuere().add(request);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
/*与Activity相关联,利用tag取消网络请求*/
getGlobalQuere().cancelAll(REQUEST_POST_TAG_1);
getGlobalQuere().cancelAll(REQUEST_GET_TAG_1);
}
Async的Get和Post请求
1、建立请求 首先建立请求客户端对象
2、进行相应的Get和Post请求,请求结果在回调里获取解析
Async-http的Get和Post请求可以基于参数化请求(RequestParams),可以清晰方便的将请求参数放在里面,然后进行Get和Post请求。
Async-http有自己默认的回调逻辑封装,例如请求成功,请求失败,重试请求等回调,但是为了对整个app的网络模块的封装和请求,可以进行二次定制回调封装,这样可以很方便的全面控制和管理网络请求的整个过程。
private void async_Get() {
/*创建请求网络客户端对象*/
AsyncHttpClient client = new AsyncHttpClient();
final String url = "";
client.get(url,
new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if(statusCode == 200){
Log.d("async_Get", new String(responseBody));
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e("async_Get", "网络连接错误:"+ error.getMessage());
}
});
}
private void async_Post() {
/*创建请求网络客户端对象*/
AsyncHttpClient client = new AsyncHttpClient();
final String urlMain = ""; http://
/*请求参数封装*/
RequestParams params = new RequestParams();
params.put("param1", "value1");
params.put("param2", "value2");
client.post(urlMain, params,
new AsyncHttpResponseHandler() {
/**
* statusCode:响应的状态码; headers:相应的头信息 比如 响应的时间,响应的服务器 ;
* responseBody:响应内容的字节
*/
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
if(statusCode == 200){
Log.d("async_Get", new String(responseBody));
}
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
Log.e("async_Get", "网络连接错误:"+ error.getMessage());
}
});
}
以上简单的介绍了Async-http的Post和Get使用方法,对于Async-http来说,远远不止这些,例如上传,解析JSon对象等这些不一一说明,具体的请查看那文档。
文档地址:http://loopj.com/android-async-http/
jar包地址:
http://yunpan.cn/cjigknguk9Jac 访问密码 6c77
http://yunpan.cn/cjigUdPdQIDzD 访问密码 876f