首頁技術(shù)文章正文

Android+物聯(lián)網(wǎng)培訓(xùn)之Volley框架進行網(wǎng)絡(luò)通訊

更新時間:2017-07-02 來源:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院 瀏覽量:

什么是Volley?

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

準備工作

使用GIt將Volley源碼下載下來,導(dǎo)入Eclipse,導(dǎo)出為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包導(dǎo)入到項目中,如下圖所示:


二.快速開始

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進行簡單布局
             
圖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) {
                           //連接成功,獲取返回數(shù)據(jù)
                           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() {
                           //設(shè)置優(yōu)先級
                           return Priority.HIGH;
                  }
                  };
         queue.add(jsonObjectRequest);//將Request添加到請求隊列中
}
 
new JsonObjectRequest表示創(chuàng)建一個JsonRequest請求,其中需要幾個參數(shù):Method.GET表示訪問方式;http://m.weather.com.cn/data/101030100.html為訪問路徑,此路徑為中國天氣網(wǎng)獲取天氣的路徑;null為訪問參數(shù),使用JSONObject 封裝,我這里沒有用到,所以置為null;Listener為訪問成功回調(diào)的方法,可在此方法的onResponse中獲取返回的數(shù)據(jù);ErrorListener為訪問失敗回調(diào)的方法,在onErrorResponse方法中可獲取失敗的信息;getPriority方法用來設(shè)置請求在請求隊列中的優(yōu)先級,queue.add(jsonObjectRequest)是將請求添加到請求隊列中。
 
運行程序,點擊jsonRequst按鈕,得出返回結(jié)果,

 
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 使用方式相似,其中g(shù)etParams()方法用于設(shè)置post訪問時的訪問參數(shù)。
 
運行程序,點擊StringRequest按鈕,得出返回結(jié)果,
 
         
 

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基本一致,其中:第一個參數(shù)為圖片的地址,第二個參數(shù)為連接成功回調(diào)方法,第三個參數(shù)為圖片最大寬度,第四個參數(shù)為圖片最大高度,第五參數(shù)為圖片的色彩模式,第六個參數(shù)為連接失敗回調(diào)的方法
 
運行程序,點擊ImageRequest按鈕,得出返回結(jié)果,
 

 

總結(jié)

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


本文版權(quán)歸黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員Android+物聯(lián)網(wǎng)培訓(xùn)學(xué)院
首發(fā):http://android.itheima.com
分享到:
在線咨詢 我要報名
和我們在線交談!