Android之Async-http

简介:

Async-http是一款国外的开源框架,作者是loopj。是基于Apache HttpClient库的。可以方便快速高效的进行网络数据请求和发送,文件下载和上传。


特点:

清晰的网络请求回调
请求使用ThreadPool,限制并发资源使用情况
GET / POST基于参数构建使用(RequestParams),方便
Multipart 文件上传,大数据上传下载
自动智能请求重试,优化了质量不一的移动连接

内置响应解析成JSON,使用JsonHttpResponseHandler

持久化cookie存储,保存cookie到你的应用程序的SharedPreferences
二进制文件(图片等)的下载,使用BinaryHttpResponseHandler


用法:

建立请求首先建立请求客户端对象。
然后进行相应的Get和Post请求,请求结果在回调里获取解析。
Async-http的Get和Post请求可以基于参数化请求(RequestParams),可以清晰方便的将你的请求参数放到里面,然后进行Get和Post请求。


示例:

首先我们需要选择一个网络服务API,这里我选择聚合数据里面的手机归属地查询API,1注册2申请,申请之后会为你的应用分配一个AppKey,下面是API说明:

/**
*
接口地址:http://apis.juhe.cn/mobile/get
支持格式:JSON/XML
请求方式:GET/POST
请求示例:http://apis.juhe.cn/mobile/get?phone=13429667914&key=您申请的KEY
请求参数:
 	名称	类型	必填	说明
 	phone	int	是	需要查询的手机号码或手机号码前7位
 	key	string	是	应用APPKEY(应用详细页查询)
 	dtype	string	否	返回数据的格式,xml或json,默认json
调用样例及调试工具:
  API测试工具 
返回字段:
 	名称	类型	说明
 	error_code	int	返回码
 	reason	string	返回说明
 	result	string	返回结果集
 	province	string	省份
 	city	string	城市
 	areacode	string	区号
 	zip	string	邮编
 	company	string	运营商
 	card	string	卡类型

*
*/
在使用Async-Http之前,必须将jar包放入工程中去,我这里写了一个示例代码,如下:

public class MainActivity extends Activity implements OnClickListener{

	// Get请求方式的URL
	private static final String URL_GET = "http://apis.juhe.cn/mobile/get?phone=18952201314&key=a53155cc6af64daabc66655b060db56a";
	// Post请求方式的URL
	private static final String URL_POST = "http://apis.juhe.cn/mobile/get?";
	//声明一个AsyncHttpClient的变量 
	private AsyncHttpClient asyncHttpClient = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		setupViews();
		initAsyncHttp();
	}

	@Override
	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.button1:
			//用Get方式提交请求
			asyncHttpGet();
			break;
		case R.id.button2:
			//用Get方式提交请求
			asyncHttpPost();
			break;

		default:
			break;
		}
		
	}
	
	private void setupViews(){
		findViewById(R.id.button1).setOnClickListener(this);
		findViewById(R.id.button2).setOnClickListener(this);
	}
	
	//初始化asyncHttp
	private void initAsyncHttp(){
		asyncHttpClient = new AsyncHttpClient();
	}
	
	private void asyncHttpGet(){
		//当Get请求被发送时,onStart、onSuccess或onFailure、onFinish方法将依次被回调
		asyncHttpClient.get(URL_GET, new AsyncHttpResponseHandler(){
			
			@Override
			public void onStart() {
				System.out.println("get request onStart...");
				super.onStart();
			}
			
			@Override
			public void onSuccess(String arg0) {
				String result = arg0;
				//如果需要将result通过Json解析封装为对象,可参考《Android之Volley》中的代码
				System.out.println(result);
				super.onSuccess(arg0);
			}
			
			@Override
			public void onFailure(Throwable arg0) {
				System.out.println("get request onFailure...");
				super.onFailure(arg0);
			}
			
			@Override
			public void onFinish() {
				System.out.println("get request onFinish...");
				super.onFinish();
			}
			
			
		});
	}
	
	private void asyncHttpPost(){
		//新建一个RequestParams对象用来存储Post请求的参数
		RequestParams requestParams = new RequestParams();
		//设置请求参数
		requestParams.put("phone", "18952201314");
		requestParams.put("key", "a53155cc6af64daabc66655b060db56a");
		
		//当Post请求被发送时,onStart、onSuccess或onFailure、onFinish方法将依次被回调
		//因为返回的数据是json格式的,所以这里的Handler可以选择成JsonHttpResponseHandler
		asyncHttpClient.post(URL_POST, requestParams, new JsonHttpResponseHandler(){

			@Override
			public void onStart() {
				System.out.println("post request onStart...");
				super.onStart();
			}
			
			@Override
			public void onSuccess(JSONObject arg0) {
				// 这里回调参数直接是JSONObject类型,省去了我们一道程序
				System.out.println(arg0.toString());
				super.onSuccess(arg0);
			}
			
			@Override
			public void onFailure(Throwable arg0) {
				System.out.println("post request onFailure...");
				super.onFailure(arg0);
			}
			
			@Override
			public void onFinish() {
				System.out.println("post request onFinish...");
				super.onFinish();
			}
		});
		
	}
}

技术分享
整个工程的代码压缩包如下,需要的可以下载:

Android Async-Http Demo

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。