你的位置:首页 > 操作系统

[操作系统]Android Volley 的基本使用/设置HTTP请求参数、apikey


最近在做一个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       @Override10       public void onResponse(String response) {11         //得到网络发送过来的字符串要做的操作,一般是转换为Json等操作12       }13     }, new Response.ErrorListener() {14 15       @Override16       public void onErrorResponse(VolleyError error) {17 //请求失败时要做的操作18       }19     }) {20       21     mQueue.add(stringRequest);//加入到请求队列,不然是不会发送请求的22     mQueue.start();23   }

之前就犯了没有写add()的错误,中间的onresponse便不会执行,希望引以为戒

下面来介绍一下在Volley怎样添加请求参数,如apikey httpArg等

需要重写getHeaders方法:

1  @Override2   public Map<String, String> getHeaders() throws AuthFailureError3   {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       @Override10       public void onResponse(String response) {11         NewsListResponseJson newsListJsonObject = gson.fromJson(response, NewsListResponseJson.class);12         newsItems = newsListJsonObject.getData();13       }14     }, new Response.ErrorListener() {15 16       @Override17       public void onErrorResponse(VolleyError error) {18 19       }20     }) {21       @Override22       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获取的,使用方法请参考博主的下一篇文章)

就这么简单,并不要像一般情况下自己写线程、和各种重复劳动

效果图: