Volley使用指南第一回(來自developer.android)

來源:互聯網
上載者:User

標籤:

最近閑來想看看android網路方面的東西。google在2013年發布了一個叫做Volley的網路請求架構,我看了一下官網,居然在training裡面就有教程。首先,英文的東西看著

還是挺不爽的,特此翻譯一下,正好自己也學習一下, 可能最後有時間也會去研究一下它的源碼是怎麼寫的。下面開始:

第一回:發送一個簡單的請求

當你用Volley的時候,你的流程分為幾步:

1、你會建立一個RequestQueue並且傳給它一個Request對象。

2、之後這個RequestQueue就會組織一些背景工作執行緒(奴隸?)來運行這個網路請求操作。

3、請求完成之後寫入cache並解析這個返回的結果。Request的工作是解析這個原始的返回,Volley關心的是怎麼把這些返回的資料傳送到你的主線程。

這一回課將會叫你怎樣通過通過Volley.newRequestQueue這個方便的方法來發送一個請求,這個方法會為你自動建立一個RequestQueue。如果想要知道怎麼自訂一個RequestQueue

請看Volley使用指南第二回。下面我們來看看怎樣在RequestQueue裡面添加一個request和怎樣取消一個request

第一步。首先,你要把android網路許可權開啟,把android.permission.INTERNET添加到你的mainifest檔案裡面。

第二步。

使用newRequestQueue:

Volley提供了一個方便的方法叫做Volley.newRequestQueue,它可以為你自動建立一個RequestQueue,那麼它使用的是預設參數啟動這個queue,舉個栗子:

 

 1 final TextView mTextView = (TextView) findViewById(R.id.text); 2 ... 3  4 // Instantiate the RequestQueue. 5 RequestQueue queue = Volley.newRequestQueue(this); 6 String url ="http://www.baidu.com"; 7  8 // Request a string response from the provided URL. 9 StringRequest stringRequest = new StringRequest(Request.Method.GET, url,10             new Response.Listener<String>() {11     @Override12     public void onResponse(String response) {13         // Display the first 500 characters of the response string.14         mTextView.setText("Response is: "+ response.substring(0,500));15     }16 }, new Response.ErrorListener() {17     @Override18     public void onErrorResponse(VolleyError error) {19         mTextView.setText("That didn‘t work!");20     }21 });22 // Add the request to the RequestQueue.23 queue.add(stringRequest);

那麼google被牆,測試網站就用百度。Volley做的工作是把解析好的response發給主線程。在主線程裡面使用接收到的資料填充UI是很容易的,因為你可以很輕鬆地使用handler

改變你的UI,但這對於這個架構的其他文法來說是相當危險的, 比如說取消操作。

第三步。發送一個請求。

要發送請求,你首先要構造一個用add()方法把它添加到RequestQueue裡面。當你把它add進去了以後,它就會通過一個類似於管道的東西,之後得到執行,把擷取到的東西

解析出來然後傳遞到主線程。當你調用call()方法的時候,Volley會啟動一個緩衝線程和一些網路分發線程。當你添加一個request,它會被cache線程識別和篩選,過程是:

如果你的request能夠被cache所服務(已經緩衝),那麼它就會被cache線程解析並發送到主線程。如果沒有被緩衝,執行以下幾步:

1、就把它加入網路請求的隊列。

2、第一個可用的網路線程從RequestQueue中接到這個工作,執行http請求。

3、在worker thread裡面解析這個請求

4、把解析好的資料寫入cache。

5、最後把資料發送到主線程。

下面是這一過程的生命週期圖:

第四步。取消一個請求

要取消一個請求,在你的Request對象上調用cancal()方法。一旦取消請求,Volley就一定不會執行response handler。你可以在onStop()方法裡面把即將發出的請求取消掉,

這樣你就不用處理一團亂的response handlers問題,無論對於onSaveInstanceState()已經被調用還是其他問題。

如果你想利用好這個特性,你要給每個執行中的request打上一個標記以便在必要的時候取消它們。有一個簡單的方法可以做到這一點:你可以為你的request對象和一個tag對象

做一個聯絡,然後你可以利用這些標記取消請求。舉個栗子:你可以為你的Activity所有的request都打上標籤,然後在onStop()方法調用requestQueue.cancelAll(this)。

同樣的,你可以為viewPager裡面的圖片請求打上標籤並在適當的時間取消請求,以便在滑動標籤的時候,下一個標籤頁不會因為上一個標籤頁的圖片請求未完成而掛起。

下面是一個使用string tag的栗子:

1 public static final String TAG = "MyTag";2 StringRequest stringRequest; // Assume this exists.3 RequestQueue mRequestQueue;  // Assume this exists.4 5 // Set the tag on the request.6 stringRequest.setTag(TAG);7 8 // Add the request to the RequestQueue.9 mRequestQueue.add(stringRequest);
1 @Override2 protected void onStop () {3     super.onStop();4     if (mRequestQueue != null) {5         mRequestQueue.cancelAll(TAG);6     }7 }

當你在取消請求的時候要當心。如果你使用response handler去推進一個狀態或者是啟動另外一個進程,你要為此負責。再說一遍,一旦取消,response handler就不會執行。

 

Volley使用指南第一回(來自developer.android)

聯繫我們

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