Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之Async-http

Android之Async-http

編輯:關於Android編程

簡介:

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

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved