最近在做一個Android的新聞客戶端,感覺收穫頗豐。 這裡分享一下Volley獲取網路數據的方法 Volley是Google I/O 2013推出的網路通信庫,它的拓展性很強,使用它能使代碼變得更健壯,Volley在提供了高性能網路通訊功能的同時,對網路圖片載入也提供了良好的支持 下麵主要介紹一下 ...
最近在做一個Android的新聞客戶端,感覺收穫頗豐。
這裡分享一下Volley獲取網路數據的方法
Volley是Google I/O 2013推出的網路通信庫,它的拓展性很強,使用它能使代碼變得更健壯,Volley在提供了高性能網路通訊功能的同時,對網路圖片載入也提供了良好的支持
下麵主要介紹一下Volley的StringRequest的使用方法
簡單的寫法是這樣的:
1 /** 2 * 獲取網路數據 新聞卡片 3 */ 4 private void getNewsData(String NewsType) { 5 String URL = NewsType;//國內新聞列表 6 StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() { 7 Gson gson = new Gson(); 8 9 @Override 10 public void onResponse(String response) { 11 //得到網路發送過來的字元串要做的操作,一般是轉換為Json等操作 12 } 13 }, new Response.ErrorListener() { 14 15 @Override 16 public void onErrorResponse(VolleyError error) { 17 //請求失敗時要做的操作 18 } 19 }) { 20 21 mQueue.add(stringRequest);//加入到請求隊列,不然是不會發送請求的 22 mQueue.start(); 23 }
之前就犯了沒有寫add()的錯誤,中間的onresponse便不會執行,希望引以為戒
下麵來介紹一下在Volley怎樣添加請求參數,如apikey httpArg等
需要重寫getHeaders方法:
1 @Override 2 public Map<String, String> getHeaders() throws AuthFailureError 3 { 4 Map<String, String> headers = new HashMap<String, String>(); 5 headers.put("Charset", "UTF-8"); 6 headers.put("Content-Type", "application/x-javascript"); 7 headers.put("Accept-Encoding", "gzip,deflate"); 8 return headers; 9 }
可以在這裡面添加你想要的任何參數
下麵給出一個範例:
1 /** 2 * 獲取網路數據 新聞卡片 3 */ 4 private void getNewsData(String NewsType) { 5 String URL = NewsType;//國內新聞列表 6 StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() { 7 Gson gson = new Gson(); 8 9 @Override 10 public void onResponse(String response) { 11 NewsListResponseJson newsListJsonObject = gson.fromJson(response, NewsListResponseJson.class); 12 newsItems = newsListJsonObject.getData(); 13 } 14 }, new Response.ErrorListener() { 15 16 @Override 17 public void onErrorResponse(VolleyError error) { 18 19 } 20 }) { 21 @Override 22 public Map<String, String> getHeaders() throws AuthFailureError { 23 Map<String, String> headers = new HashMap<>(); 24 headers.put("apikey", Constant.APIKET); 25 return headers; 26 } 27 }; 28 mQueue.add(stringRequest); 29 mQueue.start(); 30 }
註:(下圖的圖片是通過picasso獲取的,使用方法請參考博主的下一篇文章)
就這麼簡單,並不要像一般情況下自己寫線程、和各種重覆勞動
效果圖: