Android應用中網路請求庫Volley的使用

來源:互聯網
上載者:User

標籤:

接上文,這次來說一下如何使用Volley,會給出一些範例,和原理Volley使用 StringRequest
// 初始化一個請求隊列,RequestQueue是volley庫的類RequestQueue queue = Volley.newRequestQueue(this);String url ="http://www.baidu.com";//定義一個字串型請求隊列,需要傳遞4個參數分別是:url, 請求的方式(get, post..),響應成功的處理函數匿名對象, 相應出錯時候的處理函數匿名對象StringRequest stringRequest = new StringRequest(Request.Method.GET, url,            new Response.Listener<String>() {    @Override    public void onResponse(String response) {        // Display the first 500 characters of the response string.mTextView.setText("Response is: "+ response.substring(0,500));    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError error) {        mTextView.setText("That didn‘t work!");    }});//添加到請求隊列中,預設就開始了網路請求queue.add(stringRequest);

按照Volley的設計規則,程式要只要建立一個RequestQueue,並傳遞一個Request對象行了。RequestQueue維護這一些正在訪問網路的線程的運行,讀寫緩衝,擷取網路請求的返回等事務。Request對象會再收到資料後進行解析,而RequestQueue還會負責將解析過的資料返回給主線程(UI線程),以便於你將資料在UI控制項中展示等。

要使用Volley,必須在應用的Menifest檔案中聲明android.permission.INTERNET的許可權。

Volley發送網路的過程解析

要想在代碼中擷取一個RequestQueue,預設可以使用Volley.newRequestQueue方法來完成,如上述代碼所示。當然你也可以自己定義一個你自己的RequestQueue。從上面的代碼看出,當Request對象建立好後,你只要調用RequestQueue的add()方法(參數就是Request對象)就能將這個網路請求發出。當add方法調用後,Volley會自動建立一個緩衝處理線程和一個網路請求線程池,Volley會先判斷你發送網路請求是否曾經存在於緩衝中,若已經存在,那麼緩衝處理線程會對發出請求進行處理並返回結果(中間沒有任何網路互動)。如果你發送的網路請求在緩衝沒有找到,那麼這個請求會被放在網路請求隊列中,網路請求線程池中會逐個從網路請求隊列中擷取請求內容,通過HTTP發生網路請求事務,返回的結果由Volley返回給主線程。

Volley取消網路請求操作

Volley庫可以在代碼中使用RequestQueue中的cancelAll()方法完成。比如,每個Request子類都有個setTag(Object obj)的方法,可以將每個tag設定為一類請求。比如你在一個Activity中的所有Request都用this(Activity的this就是該activity執行個體)作為setTag的參數,你可以隨時隨地調用RequestQueue的cancelAll(Object obj)方法,傳遞this作為obj的實參,這樣這個activity的所有網路請求都被取消了。當然也可以傳遞任意的字串類型的參數(最好有意義的字串),代碼執行個體:

public static final String TAG = "MyTag";StringRequest stringRequest; // Assume this exists.RequestQueue mRequestQueue;  // Assume this exists.// 給Request設定tag進行分來stringRequest.setTag(TAG);mRequestQueue.add(stringRequest);

取消網路請求比較好的途徑是放在activity的onStop方法中(也可以是任何地方,這裡是慣例),如下

@Overrideprotected void onStop () {    super.onStop();    if (mRequestQueue != null) {        mRequestQueue.cancelAll(TAG);    }}

另外需要注意的是,Request的響應處理函數(Response.Listener和Response.ErrorListener,見上)此時不會被調用。

如何在Request中設定Htpp請求的Header, Body?

要想設定request中的http請求中的header, boday內容可以重載getHeader方法

StringRequest request = new StringRequest(Request.Method.POST, "www.yoururl.com", new Response.Listener<String>() {    @Override    public void onResponse(String s) {    }}, new Response.ErrorListener() {    @Override    public void onErrorResponse(VolleyError volleyError) {    }}){    @Override    public Map<String, String> getHeaders() throws AuthFailureError {        HashMap<String, String> map = new HashMap<>();        Map<String, String>  params = new HashMap<String, String>();        params.put("User-Agent", "Nintendo Gameboy");        params.put("Accept-Language", "fr");        params.put("Authorization", "Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b");        return params;    }};

對你有用的話,就點個贊吧, :)

 

Android應用中網路請求庫Volley的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.