Android Volley 和 Android-async-http使用

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值