最近在作一个Android的新闻客户端,感受收获颇丰。javascript
这里分享一下Volley获取网络数据的方法java
Volley是Google I/O 2013推出的网络通讯库,它的拓展性很强,使用它能使代码变得更健壮,Volley在提供了高性能网络通信功能的同时,对网络图片加载也提供了良好的支持api
下面主要介绍一下Volley的StringRequest的使用方法网络
简单的写法是这样的:app
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便不会执行,但愿引觉得戒ide
下面来介绍一下在Volley怎样添加请求参数,如apikey httpArg等性能
须要重写getHeaders方法:spa
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 }
能够在这里面添加你想要的任何参数线程
下面给出一个范例:code
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获取的,使用方法请参考博主的下一篇文章)
就这么简单,并不要像通常状况下本身写线程、和各类重复劳动
效果图: