1、自定义一个解析Json的Request,这里使用JackSon框架来解析Json。你也可以自定义一个解析XML的Request,或者使用FastSon来解析Json。

2、我们首先来看一下StringRequest的源码。继承自Request<T>,主要是重写parseNetworkResponse()和deliverResponse()方法。

  1. public class StringRequest extends Request<String> {
  2. private final Listener<String> mListener;
  3.  
  4. /**
  5. * Creates a new request with the given method.
  6. *
  7. * @param method the request {@link Method} to use
  8. * @param url URL to fetch the string at
  9. * @param listener Listener to receive the String response
  10. * @param errorListener Error listener, or null to ignore errors
  11. */
  12. public StringRequest(int method, String url, Listener<String> listener,
  13. ErrorListener errorListener) {
  14. super(method, url, errorListener);
  15. mListener = listener;
  16. }
  17.  
  18. /**
  19. * Creates a new GET request.
  20. *
  21. * @param url URL to fetch the string at
  22. * @param listener Listener to receive the String response
  23. * @param errorListener Error listener, or null to ignore errors
  24. */
  25. public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
  26. this(Method.GET, url, listener, errorListener);
  27. }
  28.  
  29. @Override
  30. protected void deliverResponse(String response) {
  31. mListener.onResponse(response);
  32. }
  33.  
  34. @Override
  35. protected Response<String> parseNetworkResponse(NetworkResponse response) {
  36. String parsed;
  37. try {
  38. parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
  39. } catch (UnsupportedEncodingException e) {
  40. parsed = new String(response.data);
  41. }
  42. return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
  43. }
  44. }

3、首先定义实体类

  1. public class Weather {
  2. private WeatherInfo weatherinfo;
  3.  
  4. public WeatherInfo getWeatherinfo() {
  5. return weatherinfo;
  6. }
  7.  
  8. @JsonProperty("weatherinfo")
  9. public void setWeatherinfo(WeatherInfo weatherinfo) {
  10. this.weatherinfo = weatherinfo;
  11. }
  12.  
  13. }
  1. public class WeatherInfo {
  2. private String city;
  3. private String cityid;
  4. private String temp;
  5. private String WD;
  6. private String WS;
  7. private String SD;
  8. private String WSE;
  9. private String time;
  10. private String isRadar;
  11. private String Radar;
  12. private String njd;
  13. private String qy;
  14.  
  15. public String getCity() {
  16. return city;
  17. }
  18.  
  19. @JsonProperty("city")
  20. public void setCity(String city) {
  21. this.city = city;
  22. }
  23.  
  24. public String getCityid() {
  25. return cityid;
  26. }
  27.  
  28. @JsonProperty("cityid")
  29. public void setCityid(String cityid) {
  30. this.cityid = cityid;
  31. }
  32.  
  33. public String getTemp() {
  34. return temp;
  35. }
  36.  
  37. @JsonProperty("temp")
  38. public void setTemp(String temp) {
  39. this.temp = temp;
  40. }
  41.  
  42. public String getWD() {
  43. return WD;
  44. }
  45.  
  46. @JsonProperty("WD")
  47. public void setWD(String wD) {
  48. WD = wD;
  49. }
  50.  
  51. public String getWS() {
  52. return WS;
  53. }
  54.  
  55. @JsonProperty("WS")
  56. public void setWS(String wS) {
  57. WS = wS;
  58. }
  59.  
  60. public String getSD() {
  61. return SD;
  62. }
  63.  
  64. @JsonProperty("SD")
  65. public void setSD(String sD) {
  66. SD = sD;
  67. }
  68.  
  69. public String getWSE() {
  70. return WSE;
  71. }
  72.  
  73. @JsonProperty("WSE")
  74. public void setWSE(String wSE) {
  75. WSE = wSE;
  76. }
  77.  
  78. public String getTime() {
  79. return time;
  80. }
  81.  
  82. @JsonProperty("time")
  83. public void setTime(String time) {
  84. this.time = time;
  85. }
  86.  
  87. public String getIsRadar() {
  88. return isRadar;
  89. }
  90.  
  91. @JsonProperty("isRadar")
  92. public void setIsRadar(String isRadar) {
  93. this.isRadar = isRadar;
  94. }
  95.  
  96. public String getRadar() {
  97. return Radar;
  98. }
  99.  
  100. @JsonProperty("Radar")
  101. public void setRadar(String radar) {
  102. Radar = radar;
  103. }
  104.  
  105. public String getNjd() {
  106. return njd;
  107. }
  108.  
  109. @JsonProperty("njd")
  110. public void setNjd(String njd) {
  111. this.njd = njd;
  112. }
  113.  
  114. public String getQy() {
  115. return qy;
  116. }
  117.  
  118. @JsonProperty("qy")
  119. public void setQy(String qy) {
  120. this.qy = qy;
  121. }
  122.  
  123. }

4、实现JacksonRequest

  1. public class JacksonRequest<T> extends Request<T>{
  2. private final Listener<T> mListener;
  3.  
  4. private Class<T> mClass;
  5.  
  6. private static ObjectMapper objectMapper = new ObjectMapper();
  7.  
  8. public JacksonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) {
  9. super(method, url, errorListener);
  10. // TODO Auto-generated constructor stub
  11. mListener = listener;
  12. mClass = clazz;
  13. }
  14.  
  15. public JacksonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener){
  16. this(Method.GET, url, clazz, listener, errorListener);
  17. }
  18.  
  19. @Override
  20. protected Response<T> parseNetworkResponse(NetworkResponse response) {
  21. // TODO Auto-generated method stub
  22. try {
  23. String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
  24. return Response.success(objectMapper.readValue(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response));
  25. } catch (UnsupportedEncodingException e) {
  26. // TODO Auto-generated catch block
  27. return Response.error(new ParseError(e));
  28. } catch (JsonParseException e) {
  29. // TODO Auto-generated catch block
  30. e.printStackTrace();
  31. } catch (JsonMappingException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. } catch (IOException e) {
  35. // TODO Auto-generated catch block
  36. e.printStackTrace();
  37. }
  38. return null;
  39. }
  40.  
  41. @Override
  42. protected void deliverResponse(T response) {
  43. // TODO Auto-generated method stub
  44. mListener.onResponse(response);
  45. }
  46.  
  47. }

5、Jackson的使用,和StringRequest的使用是一样的。

  1. public class JacksonActivity extends Activity {
  2. private RequestQueue requestQueue;
  3.  
  4. private TextView mTvShow;
  5.  
  6. private String result = "";
  7.  
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_jackson);
  13.  
  14. initView();
  15. }
  16.  
  17. public void initView(){
  18. mTvShow = (TextView) findViewById(R.id.tv_jackson);
  19.  
  20. requestQueue = Volley.newRequestQueue(getBaseContext());
  21. requestQueue.add(jacksonRequest);
  22. requestQueue.start();
  23. }
  24.  
  25. private JacksonRequest<Weather> jacksonRequest = new JacksonRequest<Weather>("http://www.weather.com.cn/data/sk/101010100.html",
  26. Weather.class,
  27. new Response.Listener<Weather>() {
  28.  
  29. @Override
  30. public void onResponse(Weather response) {
  31. // TODO Auto-generated method stub
  32. WeatherInfo info = response.getWeatherinfo();
  33. result += info.getCity() + "\n" + info.getTemp() + "\n" +info.getTime();
  34. mTvShow.setText(result);
  35. }
  36. }, new Response.ErrorListener(){
  37.  
  38. @Override
  39. public void onErrorResponse(VolleyError error) {
  40. // TODO Auto-generated method stub
  41. mTvShow.setText(error.toString());
  42. }
  43.  
  44. });
  45. }

6、不要忘记加入网络访问权限

  1. <uses-permission android:name="android.permission.INTERNET"/>

7、参考博文:

http://blog.csdn.net/guolin_blog/article/details/17482095/

Android网络开发之Volley--Volley自定义Request的更多相关文章

  1. Android网络开发之Volley--Volley基本用法ImageRequest(三)

    1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...

  2. Android网络开发之Volley--Volley基本用法JsonObjectReques(二)

    1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...

  3. Android网络开发之Volley--Volley基本用法StringRequest(一)

    1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...

  4. Android网络开发之OkHttp--基本用法POST

    1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...

  5. Android网络开发之OkHttp--基本用法GET

    1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...

  6. Android 网络开发之WIFI

    WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...

  7. Android网络开发之用tcpdump抓包

    Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...

  8. Android网络开发之OkHttp--基本用法实例化各个对象

    1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 priv ...

  9. Android网络开发之WIFI

    WIFI全称Wireless Fidelity, 又称802.11b标准.WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance( ...

随机推荐

  1. openwrt 中make的使用

    make 命令简单说明 make V=99 V=99表示输出详细的debug信息 make world 表示编译所有 make j=2 V=99 如是多核CPU,加j=2 选项理论上能加快编译速度 m ...

  2. MC 在1分钟图拿出5分钟,15分钟,30分钟,1小时的K线

    using System; using System.Drawing; using System.Linq; using System.Collections; namespace PowerLang ...

  3. Underscore.js 的模板功能介绍与应用

    Underscore是一个非常实用的JavaScript库,提供许多编程时需要的功能的支持,他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能,需要了解的朋友可以详细参考下   U ...

  4. 使用WMware新建linux虚拟机

    使用WMware安装linux虚拟机的时候很多人搞不清楚使用什么适配器. 平时也看到很多误人子弟的观点,这里用事实说话. VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络 ...

  5. keepalived 健康检测

    1.TCP方式 详见:http://www.cnblogs.com/tengpan-cn/p/5776574.html 以下内容,都是基于此进行修改 2.HTTP_GET 根据返回状态判断服务器是否正 ...

  6. 转:SSH原理与运用(二):远程操作与端口转发

    作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操作,就是一个例子: $ ssh use ...

  7. 【纯欧拉函数】 poj 2407

    #include <cstdio> #include <iostream> using namespace std; int phi(int x) { int t=x; ;i& ...

  8. WPF Template模版之DataTemplate与ControlTemplate【一】

    WPF Template模版之DataTemplate与ControlTemplate[一] 标签: Wpf模版 2015-04-19 11:52 510人阅读 评论(0) 收藏 举报  分类: -- ...

  9. java中io对文件操作的简单介绍

    11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...

  10. svn删除用户

    如果安装有svn客户端,右键打开svn settings 然后就可以重新登录svn用户了 或者删除此文件