標籤:android async-http android-async-http例子
這是我重新回到Android,新學習的一篇關於Android-async-http架構的的例子,簡單的介紹下,也算自己做的小筆記一篇
先介紹下它是幹嘛的
首先 它是第三方開源類庫,在Android開發中,請求伺服器擷取資料太常見了,然後它就是解決一般請求方式的麻煩之處的,簡單來說,用了它,以後請求伺服器就變得簡單啦
其次,看架構名稱 帶有 async,有經驗的開發人員都知道,它是非同步, 既然是非同步 又用在Android裡面,這說明它是用在非UI線程的。還有一個好處就是 不用 手動 new Thread線程了, 是不是很好用撒。
擦,還是上代碼吧!
1,到官網或者其他什麼地方,下載下jar包, 或者源碼,都行,隨便
2,把jar包匯入到你的工程裡面 ,並進行build ,如
3.如果想看源碼,就把源碼library\src\main\java的com包黏貼到項目中的src目錄下,如
4. 就是寫主要的代碼了。這是封裝的一個util
package cn.com.asynchttp;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class HttpUtill {
private static AsyncHttpClient client = new AsyncHttpClient();// 執行個體化對象
static {
client.setTimeout(5000); // 設定連線逾時,預設10s
}
/**
* 用一個完整 的url 擷取一個String 對象
*
* @param urlString
* @param res
*/
public static void get(String urlString, AsyncHttpResponseHandler res) {
client.get(urlString, res);
}
/**
* url裡面帶參數
*
* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, AsyncHttpResponseHandler res) {
client.get(urlString, params, res);
}
/**
* 不帶參數,擷取json對象或者數組
* @param urlString
* @param res
*/
public static void get(String urlString, JsonHttpResponseHandler res) {
client.get(urlString, res);
}
/**
* 帶參數,擷取json對象或者數組
* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, JsonHttpResponseHandler res) {
client.get(urlString, params, res);
}
/**
* 下載資料使用,會返回byte資料
* @param uString
* @param bHandler
*/
public static void get(String uString, BinaryHttpResponseHandler bHandler) {
client.get(uString, bHandler);
}
public static AsyncHttpClient getClient() {
return client;
}
}
接下來就是 Activity了
package cn.com.asynchttp;
import org.apache.http.Header;
import org.apache.http.protocol.HTTP;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import cn.com.R;
/**
* android-aysnc-http架構學習
*
* @author Administrator
*
*/
public class StudyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.studyasynchttp);
Button btn_click = (Button) findViewById(R.id.btn_studyasynchttp_click);
btn_click.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String url = "http://這是我專案服務器的地址,這裡就不貼上了";
RequestParams params = new RequestParams();
params.add("key", "value"); //這裡是參數,可以用put也可以用add,隨便
params.add("key", "value");
HttpUtill.get(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub
System.out.println(" onSuccess -- arg0--------" + arg0);
System.out.println(new String(arg2));//這是伺服器返回來的資料了,這是沒有源碼的,//面是有源碼的。
}
@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
System.out.println("onFailure---arg0--------" + arg0);
}
});
HttpUtill.get(url, params, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
}
});
}
});
}
}
布局檔案,一個按鈕
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_studyasynchttp_click"
android:text="studysynchttp"
/>
</LinearLayout>
搜噶,完事!
下面分享下 POST,GET,請求方式! 也是參考別人的, 這都無所謂咯!
/**
* 採用AsyncHttpClient的Post方式進行實現
* @param userName
* @param userPass
*/
public void HttpClientPost(String userName, String userPass) {
AsyncHttpClient client = new AsyncHttpClient(); // 建立非同步請求的用戶端對象
String url = "http://"; // 定義請求的地址
// 建立請求參數的封裝的對象
RequestParams params = new RequestParams();
params.put("username", userName); // 佈建要求的參數名和參數值
params.put("userpass", userPass);// 佈建要求的參數名和參數
// 執行post方法
client.post(url, params, new AsyncHttpResponseHandler() {
/**
* 成功處理的方法
* statusCode:響應的狀態代碼; headers:相應的頭資訊 比如 響應的時間,響應的伺服器 ;
* responseBody:響應內容的位元組
*/
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
if (statusCode == 200) {
tv_result.setText(new String(responseBody)); // 設定顯示的文本
}
}
/**
* 失敗處理的方法
* error:響應失敗的錯誤資訊封裝到這個異常對象中
*/
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
error.printStackTrace();// 把錯誤資訊列印出軌跡來
}
});
}
GET
/**
* 採用AsyncHttpClient的Get方式進行實現
* @param userName
* @param userPass
*/
public void HttpClientGet(String userName, String userPass) {
// 建立非同步用戶端對象
AsyncHttpClient client = new AsyncHttpClient();
String url = ""; // 請求的地址
// 建立請求參數的封裝的對象
RequestParams params = new RequestParams();
params.put("username", userName); // 佈建要求的參數名和參數值
params.put("userpass", userPass);// 佈建要求的參數名和參數
// 發送get請求的時候 url地址 相應參數,匿名回調對象
client.get(url, params,new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers,
byte[] responseBody) {
// 成功處理的方法
System.out
.println("statusCode-------------------" + statusCode);
// 遍曆頭資訊
for (int i = 0; i < headers.length; i++) {
Header header = headers[i];
System.out.println("header------------Name:"
+ header.getName() + ",--Value:"
+ header.getValue());
}
// 設定控制項內容
tv_result.setText(new String(responseBody));
}
@Override
public void onFailure(int statusCode, Header[] headers,
byte[] responseBody, Throwable error) {
// 失敗處理的方法
error.printStackTrace();
}
});
}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Android-async-http 例子