相信大家很多做安卓開發的都知道Volley這個架構 本人做了差不多7個項目 有四個用的這個架構 對它還是比較鐘愛的 好下面就來詳細介紹一下 整個Volley架構 我分為三部分去講解 今天想進行一些基礎的講解
1.什麼是Volley
Volley是Google I/O 2013上推出的 是android上的網絡通訊庫
下面看一張谷歌官方的圖檔
這張圖很直覺的看出
Volley特别适合用于網絡互動頻繁 但是資料量不大的情況 如果你要下載下傳一些大檔案 使用Volley架構是比較糟糕的選擇 Volley不适合大資料量的互動
Volley把AsyncHttpClient和Universal-Image-Loader的優點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網絡上的圖檔
2.Volley有哪些功能
a.資料異步請求;
b.網絡請求的排序
c.網絡請求的優先級處理
d.緩存(volley内部會建立一個緩存線程)
e.多級别取消請求
f.和Activity和生命周期的關聯(Activity結束時同時取消所有網絡請求)
3.volley jar包
我們可以百度上面搜出一大堆jar包 這個我不說了
4.Volley的用法(StringRequest)
最基本的HTTP通信,即發起一條HTTP請求,
首先我們需要得到一個RequestQueue
RequestQueue MyRequestQueue = Volley.newRequestQueue(context);
這個MyRequestQueue 是一個請求隊列對象 内部的設計非常适合高并發的 是以我們隻需要建立一個RequestQueue就可以了 我們可以将這行代碼放到Application裡面去初始化(這裡我們隻是說一下用法 是以我就直接放到Activity中了)
接下來我們看一下
- StringRequest stringRequest = new StringRequest("http://www.baidu.com",
- new Response.Listener<String>() {
- @Override
- public void onResponse(String response) {
- Log.d("TAG", response);
- }
- }, new Response.ErrorListener() {
- @Override
- public void onErrorResponse(VolleyError error) {
- Log.e("TAG", error.getMessage(), error);
- }
- });
這段代碼中兩個回調方法 大家一應該都明白這裡面的意思 這裡需要三個參數 第一個URl不多說 第二個請求成功的回調方法 第三個 請求失敗的回調方法
最後我們需要把這個StringRequest add到我們剛才建立的請求隊列中
MyRequestQueue.add(stringRequest)
注:StringRequest隻是Request的一種還有很多(ImageRequest,jsonRequest等等 還可以使用自定義的Request這個後面我們詳細講解一下)
上面就是一個簡單的Volley的get請求 有人問了 那post請求呢
好接着看
StringRequest提供了一個有四個參數的方法
StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener);
我們看第一個參數 大家肯定明白了 對 就是我們選擇get post的地方
我們隻是這裡可以設定請求方法 但是并沒有我們可以送出參數的地方 那怎麼辦呢 我當時也納悶 最後看了大神的部落格才知道(引用大神的一段話)
StringRequest中并沒有提供設定POST參數的方法,但是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來擷取POST參數,那麼解決方法自然也就有了,我們隻需要在StringRequest的匿名類中重寫getParams()方法,在這裡設定POST參數就可以了
- StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) {
- @Override
- protected Map<String, String> getParams() throws AuthFailureError {
- Map<String, String> map = new HashMap<String, String>();
- map.put("params1", "value1");
- map.put("params2", "value2");
- return map;
- }
- };
這個Request我們提了一句 我們還可以使用自己定制的Request這個後面講
總結
Volley請求其實非常簡單
1.建立RequestQueue
2.建立StringRequest
3.将StringRequest添加到請求隊列中
我們重點強調的是2 StringRequest 還有ImageRequest JsonRequest等 其他的請求步驟跟這個一樣 大家要學會舉一反三
有哪些寫的不對的地方請大家及時反映