備註: 本筆記是參照了 http://blog.csdn.net/ysh06201418/article/details/46443235 學習以後寫下的json
簡介: Volley是google官網退出的一種流行的網絡請求框架,封裝了Android繁瑣的httpclient和HttpUrlConnection,使得咱們沒必要要寫更多繁瑣的代碼就可以很好的實現網絡通訊,同時AsyncHttpClient和ImageLoader集成於一身,既能夠像AsyncHttpClient同樣很是簡單地進行HTTP通訊,也能夠像Universal-Image-Loader同樣輕鬆加載網絡上的圖片。除了簡單易用以外,Volley在性能方面也進行了大幅度的調整,它的設計目標就是很是適合去進行數據量不大,但通訊頻繁的網絡操做,而對於大數據量的網絡操做,好比說下載文件等,Volley的表現就會很是糟糕。數組
Volley的用法:網絡
初始化:app
new 一個RequestQueue實例,而後把一些request添加上去便可框架
private RequestQueue mQueue = Volley.newRequestQueue(this);
1. StringRequest的用法:ide
1 StringRequest request = new StringRequest("http://www.baidu.com", new Response.Listener<String>() { 2 @Override 3 public void onResponse(String response) { 4 requestTextView.setText(response); 5 6 } 7 },new Response.ErrorListener(){ 8 @Override 9 public void onErrorResponse(VolleyError error) { 10 11 } 12 }); 13 mQueue.add(request);
這樣的話,一個最基本的HTTP發送與響應的功能就完成了。你會發現根本還沒寫幾行代碼就輕易實現了這個功能,主要就是進行了如下三步操做:post
1. 建立一個RequestQueue對象。性能
2. 建立一個StringRequest對象。學習
3. 將StringRequest對象添加到RequestQueue裏面。大數據
上面的是get請求,若是是post請求,那又該怎樣實現呢,Volley有本身的實現方法:StringRequest中並無提供設置POST參數的方法,可是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來獲取POST參數,那麼解決方法天然也就有了,咱們只須要在StringRequest的匿名類中重寫getParams()方法,在這裏設置POST參數就能夠了,具體以下:
1 StringRequest request = new StringRequest(Request.Method.POST, "", new Response.Listener<String>() { 2 @Override 3 public void onResponse(String response) { 4 5 } 6 }, new Response.ErrorListener() { 7 8 9 @Override 10 public void onErrorResponse(VolleyError error) { 11 12 } 13 }) { 14 @Override 15 protected Map<String, String> getParams() throws AuthFailureError { 16 return super.getParams(); 17 } 18 }; 19 mQueue.add(request);
學完了最基本的StringRequest的用法,咱們再來進階學習一下JsonRequest的用法。相似於StringRequest,JsonRequest也是繼承自Request類的,不過因爲JsonRequest是一個抽象類,所以咱們沒法直接建立它的實例,那麼只能從它的子類入手了。JsonRequest有兩個直接的子類,JsonObjectRequest和JsonArrayRequest,從名字上你應該能就看出它們的區別了吧?一個是用於請求一段JSON數據的,一個是用於請求一段JSON數組的。
1 JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("", null, new Response.Listener<JSONObject>() { 2 @Override 3 public void onResponse(JSONObject response) { 4 5 } 6 }, new Response.ErrorListener() { 7 @Override 8 public void onErrorResponse(VolleyError error) { 9 10 } 11 });
3.ImageRequest的用法
1 ImageRequest ir = new ImageRequest("http://www.dpfile.com/s/res/app-touch-icon-152x152.ee6d0c24fc2de0f9a62b6cc9e6720393.png", new Response.Listener<Bitmap>() { 2 @Override 3 public void onResponse(Bitmap response) { 4 // imageView.setImageBitmap(response); 5 ImageView iv = new ImageView(VolleyActivity.this); 6 // iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 7 iv.setImageBitmap(response); 8 imageLayout.addView(iv); 9 } 10 }, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() { 11 @Override 12 public void onErrorResponse(VolleyError error) { 13 14 } 15 }); 16 mQueue.add(ir);