Android-async-http 例子

來源:互聯網
上載者:User

標籤: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 例子

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.