教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Android培訓實戰(zhàn)教程之Volley框架進行網絡通訊

更新時間:2015年12月28日14時59分 來源:傳智播客Android培訓學院 瀏覽次數:

什么是Volley?

在2013年Google I/O大會上推出了一個新的網絡通信框架——Volley。Volley可以說是把AsyncHttpClient和Universal-Image-Loader的優(yōu)點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網絡上的圖片。

準備工作

使用GIt將Volley源碼下載下來,導入Eclipse,導出為jar包
 
源碼下載地址:https://android.googlesource.com/platform/frameworks/volley
jar包下載地址:http://download.csdn.net/detail/nobcdz/6482641

案例分析

接下來, 我們通過一個簡單的案例,來了解一下Volley的使用方式。

一.創(chuàng)建Demo程序

使用eclipse創(chuàng)建Android項目VolleyDemo,將Volley.jar包導入到項目中,如下圖所示:
 圖1-1  VolleyDemo

二.快速開始

1.在MainActivity的Oncreate()方法中獲取Request請求隊列對象
 
@Override
protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         //獲取請求隊列對象
         RequestQueue queue = Volley.newRequestQueue(this);
}
 
Volley.newRequestQueue(this)獲取請求隊列,RequestQueue可以緩存所有的HTTP請求,然后按照一定的算法并發(fā)地發(fā)出這些請求,所以RequestQueue非常合適高并發(fā)。
 
2.對activity_mian.xml進行簡單布局
             
圖1-2  界面
3.JsonObjectRequest 用法
 
private void jsonObjectRequestGET() {
         JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.GET,
                  "http://m.weather.com.cn/data/101030100.html", 
                  null, 
                  new Response.Listener<JSONObject>() {
                  @Override
                  public void onResponse(JSONObject response) {
                           //連接成功,獲取返回數據
                           Log.i("JSONObjectRequest", response.toString());
                           data.setText(response.toString());
                  }                          
                  }, 
                  new Response.ErrorListener() {
                  @Override
                  public void onErrorResponse(VolleyError error) {
                           //連接失敗,獲取失敗的信息
                           Log.e("JSONObjectRequest", error.getMessage(),error);
                           data.setText(error.getMessage());
                  }
                  }){
                  @Override
                  public com.android.volley.Request.Priority getPriority() {
                           //設置優(yōu)先級
                           return Priority.HIGH;
                  }
                  };
         queue.add(jsonObjectRequest);//Request添加到請求隊列中
}
 
new JsonObjectRequest表示創(chuàng)建一個JsonRequest請求,其中需要幾個參數:Method.GET表示訪問方式;http://m.weather.com.cn/data/101030100.html為訪問路徑,此路徑為中國天氣網獲取天氣的路徑;null為訪問參數,使用JSONObject 封裝,我這里沒有用到,所以置為null;Listener為訪問成功回調的方法,可在此方法的onResponse中獲取返回的數據;ErrorListener為訪問失敗回調的方法,在onErrorResponse方法中可獲取失敗的信息;getPriority方法用來設置請求在請求隊列中的優(yōu)先級,queue.add(jsonObjectRequest)是將請求添加到請求隊列中。
 
運行程序,點擊jsonRequst按鈕,得出返回結果,如下圖所示:
圖1-3  JsonObjectRequest執(zhí)行結果圖示
 
4.StringRequest 的用法
 
private void stringRequestPost() {
         StringRequest stringRequest = new StringRequest(Method.POST, 
                  "http://app.ihome86.com/php/index.php/register/get_code", 
                  new Response.Listener<String>() {
                           @Override
                           public void onResponse(String response) {
                                    data.setText(response.toString());
                           }
                  }, new Response.ErrorListener() {

                           @Override
                           public void onErrorResponse(VolleyError error) {
                                    data.setText(error.getMessage());
                           }
                  }){
                  @Override
                  protected Map<String, String> getParams()throws AuthFailureError {
                           Map<String, String> map = new HashMap<String, String>();
                           map.put("tel", "13121646499");
                           return map;
                  }
                  };
         queue.add(stringRequest);
}
 
StringRequest請求的使用方式和JsonObjectRequest 使用方式相似,其中getParams()方法用于設置post訪問時的訪問參數。
 
運行程序,點擊StringRequest按鈕,得出返回結果,如下圖所示:
 
         
 
圖1-4  StringRequest執(zhí)行結果圖示
 
5.ImageRequest的用法
 
private void imageRequest() {
         ImageRequest imageRequest = new ImageRequest(
         "http://a.hiphotos.baidu.com/image/w%3D2048/sign=d2ebf5336963f6241c5d3e03b37ceaf8/902397dda144ad347976f98dd2a20cf430ad85ea.jpg", 
                  new Response.Listener<Bitmap>() {
                           @Override
                           public void onResponse(Bitmap bitmap) {
                                             imageView.setImageBitmap(bitmap);
                           }
         }, 0, 0, Config.ARGB_8888, new Response.ErrorListener() {
                           @Override
                           public void onErrorResponse(VolleyError error) {
                                    data.setText(error.toString());
                           }
         });
         queue.add(imageRequest);
}
 
ImageRequest的用法和JsonRequest、StringRequest基本一致,其中:第一個參數為圖片的地址,第二個參數為連接成功回調方法,第三個參數為圖片最大寬度,第四個參數為圖片最大高度,第五參數為圖片的色彩模式,第六個參數為連接失敗回調的方法
 
運行程序,點擊ImageRequest按鈕,得出返回結果,如下圖所示:
 
 
圖1-4  ImageRequest執(zhí)行結果圖示
 

總結

通過演示的例子,我們可以看出來,JsonObjectReqeust、StringRequest、ImageReqeust的用法基本上是一樣,Volley的易用之處也體現在這里,其他的請求方式我就不再去講解了。Volley簡化了網絡通信的一些開發(fā),現在也越來也多的應用到項目中去,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,缺點對于大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕,還是需要使用原始的方法。


本文版權歸傳智播客Android培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Android培訓學院
首發(fā):http://xamj520.com/android/
0 分享到:
和我們在線交談!