1. 程式人生 > >弄明白android 網路庫之Volley(一)

弄明白android 網路庫之Volley(一)

1Volley是什麼?

VolleyGoogle官方在2013 Android IO大會上推出的新網路通訊框架,

一個使得android網路通訊更加容易並且迅速的HTTP庫。它並且可以通過開放的AOSP倉庫進行使用。

它有以下特性:

1)自動排程網路請求;

2)支援多併發的網路連線;

3)磁碟和記憶體響應快取使用標準HTTP快取特性;

4)支援請求優先順序;

5)取消請求API。你可以取消一個請求,或者你可以設定塊或取消的請求範圍;

6)易於定製,例如,重試和補償;

7)強大的排序,便於正確填充UI的從網路獲取而來的非同步資料;

8)有除錯和跟蹤工具

它就是一個讓你更快捷更高效進行網路通訊的

android網路工具庫,它適用於小資料的交換。對於大檔案或者流媒體,它是不適合的。而對於大檔案的下載操作,請考慮用其他的庫,比如DownloadManager。

Volley is notsuitable for large download or streaming operations, since Volley holds allresponses in memory during parsing. For large download operations, considerusing an alternative like DownloadManager.

如果你安裝有git,那麼可以通過下面命令來獲得

Volley的原始碼:

二、如何使用Volley?

1、使用Volley傳送一個簡單的請求:

Volley提供了一個方法來根據一個URL發起一個HTTP請求。只需要做以下5個步驟:

1)下載volley.jar包,並加入到android工程的libs中;

2)配置上網的許可權;

 <uses-permission android:name="android.permission.INTERNET" >


3)通過Volley的靜態方法新建一個請求佇列物件RequestQueue,這裡解釋下什麼是RequestQueue,從它的原始碼可以大概瞭解到它是擁有好幾個queue

成員變數的物件,其中包括快取佇列和網路佇列,都是採用優先順序阻塞佇列。因此,我們可以理解它為一個用來處理我們所提出所有網路請求的佇列。

/** The cache triage queue. */
privatefinalPriorityBlockingQueue<Request<?>> mCacheQueue =
newPriorityBlockingQueue<Request<?>>();
/** The queue of requests that are actually going out to the network. */
privatefinalPriorityBlockingQueue<Request<?>> mNetworkQueue =
newPriorityBlockingQueue<Request<?>>();
 

RequestQueue queue = Volley.newRequestQueue(this);

4)提供一個URLnew一個StringRequest 物件;所謂StringRequest物件,在它原始碼註釋可知,它就一個是利用給定的URL作為一個String去檢索響應內容的封裝請求物件。

/**
* A canned request for retrieving the response body at a given URL as a String.
*/
publicclassStringRequestextendsRequest<String>{
privatefinalListener<String> mListener;
/**
* Creates a new request with the given method.
*
* @param method the request {@link Method} to use
* @param url URL to fetch the string at
* @param listener Listener to receive the String response
* @param errorListener Error listener, or null to ignore errors
*/
publicStringRequest(int method,String url,Listener<String> listener,
ErrorListener errorListener){
super(method, url, errorListener);
mListener= listener;
}
 

5)並把它加入到RequestQueue佇列中。

queue.add(stringRequest);

官方所給出的提示DEMO如下:

final TextView mTextView = (TextView) findViewById(R.id.text);
...
 
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
 
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
         new Response.Listener() {
   @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!");
   }
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
 


2、使用JSON傳遞資料:JsonRequest,返回JSONObject或者JSONArray

兩個步驟:

1)把你要提交給伺服器的東西封裝到一個JSONObject ,並新建一個JsonObjectRequest,使用RequestManager.addRequest(JsonObjectRequest,this);

把請求提交到佇列中去;

RequestManager.addRequest(new JsonObjectRequest(Method.GET, VolleyApi.JSON_TEST, null,
responseListener(), errorListener()),this);

2)寫一個responseListener例項來接收處理伺服器返回的資訊;

privateResponse.Listener<JSONObject> responseListener() {
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
mTvResult.setText(response.toString());
}
};
}
 

執行以上程式碼就可以傳送一個JSON請求.

那麼 JsonObjectRequest是什麼呢?顧名思義,JSON物件請求。

    public JsonObjectRequest(int method, String url, JSONObject jsonRequest,
            Listener<JSONObject> listener, ErrorListener errorListener) {
        super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                    errorListener);
    }

傳入引數有5

method

HTTP定義的與伺服器互動的方法,這裡有定義了7個方法

String url

客戶端要訪問伺服器的地址

JSONObject jsonRequest

客戶端訪問時要提交的資料,以JSON的形式

Listener<JSONObject> listener

伺服器返回時的偵聽介面,回撥這個介面處理返回的JSONObject結果

ErrorListenererrorListener

錯誤介面,回撥使用

 從Method的原始碼可以看到,這裡就是HTTP的通訊方法,如果不太清楚下面幾個方法的用處:請看


    public interface Method {
        int DEPRECATED_GET_OR_POST = -1;
        int GET = 0;
        int POST = 1;
        int PUT = 2;
        int DELETE = 3;
        int HEAD = 4;
        int OPTIONS = 5;
        int TRACE = 6;
        int PATCH = 7;
    }

 而對於 兩個listener,分別是接收伺服器返回資訊與錯誤資訊的處理。應用的是Android回撥機制

 /** Callback interface for delivering parsed responses. */
    public interface Listener<T> {
        /** Called when a response is received. */
        public void onResponse(T response);
    }
 
    /** Callback interface for delivering error responses. */
    public interface ErrorListener {
        /**
         * Callback method that an error has been occurred with the
         * provided error code and optional user-readable message.
         */
        public void onErrorResponse(VolleyError error);
    }
最後,上傳一個應用Volley的Demo,裡面簡單演示了volley網路通訊的過程,並且我加入了Volley的實現原始碼,可以對整個實現過程多加研究瞭解,從而懂得更多。