最近在做一个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获取的,使用方法请参考博主的下一篇文章)
就这么简单,并不要像一般情况下自己写线程、和各种重复劳动
效果图: