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

时间: 2025-01-19 22:52:09

Android之Async-http的相关文章

appium的几点总结

原文链接:http://blog.csdn.net/bear_w/article/details/50345283 1. 建立session时常用命令: DesiredCapabilities cap = new DesiredCapabilities(); cap.SetCapability("browserName", ""); // web 浏览器名称('Safari' ,'Chrome'等).如果对应用进行自动化测试,这个关键字的值应为空. cap.SetC

Appium Server源码分析之作为Bootstrap客户端

Appium Server拥有两个主要的功能: 它是个http服务器,它专门接收从客户端通过基于http的REST协议发送过来的命令 他是bootstrap客户端:它接收到客户端的命令后,需要想办法把这些命令发送给目标安卓机器的bootstrap来驱动uiatuomator来做事情 通过上一篇文章<Appium Server 源码分析之启动运行Express http服务器>我们分析了Appium Server是如何作为一个http服务器进行工作的.那么今天我们就要分析第二点,Appium S

ActivityTask: Android上的Async/Await小帮手

在谷歌开发者大会上,Xamarin组的几个团队成员出席了生命周期的架构组件座谈 (推荐你看看).虽然提出的解决方案很有趣,但在某些情况下,映射到我们在.NET中已经拥有的模式,它的共鸣与我们这些人因为这些Android生命周期细节让一个特定的C #特征使用较为繁琐: async/await. 对于 async/await,Android开发者有两个主要的挑剔点: 因为Android资源系统的工作方式,配置的更改(如屏幕旋转)将在默认情况下重新创建Activity实例. 因为在Activity生命

跨过几个坑,终于完成了我的第一个Xamarin Android App!

时间过得真快,距离上次发随笔又是一年多.作为上次发的我的第一个WP8.1应用总结的后继,这次同样的主要功能,改为实现安卓版APP.前几个月巨硬收购Xamarin,把Xamarin集成到VS里了,大大方便了我广大.net码农.由于年初脱了WP的坑,换了个安卓低端机,想着什么时候装Xamarin开发个App玩玩. 上个月笔记本100G的C盘莫名其妙快满了,趁着重装系统的机会,安装了VS2015 with sp3,下载开发Android App需要的各种东东.这里要感谢[C#]VS2015开发环境的安

android多媒体框架学习 详解 最新版本

一:多媒体框架概述   jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现了media 在整个android系统中的重要性!framework/av下都是些C/C++代码(libmedia,libmediaplayerservice,libstagefright),jni和 java api 还是保留在原来的位置,改革还不够彻底,但还是迈出了这一步,以后维护能更好的进

深入探索Android中的Handler

一.概述 1. 什么是Handler Handler是Android消息机制的上层接口,它为我们封装了许多底层的细节,让我们能够很方便的使用底层的消息机制.Handler的最常见应用场景之一便是通过Handler在子线程中间接更新UI.Handler的作用主要有两个:一是发送消息:二是处理消息,它的运作需要底层Looper和Message的支撑.MessageQueue即消息队列,它的底层用单链表实现:Looper则负责在一个循环中不断从MessageQueue中取消息,若取到了就交由Handl

EventBus(一):Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

Android EventBus源码解析, 带你深入理解EventBus

上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: [java] view plain copy public class SampleComponent extends Fragment { @Override public vo

Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

【转】Android开源项目 分类 便于查看

之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 Android开源项目第一篇——个性化控件(View)篇 主要介绍那些不错个性化的View,包括ListView.Ac