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

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

public class StringRequest extends Request<String> {private final Listener<String> mListener;/*** Creates a new request with the given method.** @param method the request {@link Method} to use* @param url URL to fetch the string at* @param listener Listener to receive the String response* @param errorListener Error listener, or null to ignore errors*/public StringRequest(int method, String url, Listener<String> listener,ErrorListener errorListener) {super(method, url, errorListener);mListener = listener;}/*** Creates a new GET request.** @param url URL to fetch the string at* @param listener Listener to receive the String response* @param errorListener Error listener, or null to ignore errors*/public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {this(Method.GET, url, listener, errorListener);}@Overrideprotected void deliverResponse(String response) {mListener.onResponse(response);}@Overrideprotected Response<String> parseNetworkResponse(NetworkResponse response) {String parsed;try {parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));} catch (UnsupportedEncodingException e) {parsed = new String(response.data);}return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));}
}

3、首先定义实体类

public class Weather {private WeatherInfo weatherinfo;public WeatherInfo getWeatherinfo() {return weatherinfo;}@JsonProperty("weatherinfo")public void setWeatherinfo(WeatherInfo weatherinfo) {this.weatherinfo = weatherinfo;}}

public class WeatherInfo {private String city;private String cityid;private String temp;private String WD;private String WS;private String SD;private String WSE;private String time;private String isRadar;private String Radar;private String njd;private String qy;public String getCity() {return city;}@JsonProperty("city")public void setCity(String city) {this.city = city;}public String getCityid() {return cityid;}@JsonProperty("cityid")public void setCityid(String cityid) {this.cityid = cityid;}public String getTemp() {return temp;}@JsonProperty("temp")public void setTemp(String temp) {this.temp = temp;}public String getWD() {return WD;}@JsonProperty("WD")public void setWD(String wD) {WD = wD;}public String getWS() {return WS;}@JsonProperty("WS")public void setWS(String wS) {WS = wS;}public String getSD() {return SD;}@JsonProperty("SD")public void setSD(String sD) {SD = sD;}public String getWSE() {return WSE;}@JsonProperty("WSE")public void setWSE(String wSE) {WSE = wSE;}public String getTime() {return time;}@JsonProperty("time")public void setTime(String time) {this.time = time;}public String getIsRadar() {return isRadar;}@JsonProperty("isRadar")public void setIsRadar(String isRadar) {this.isRadar = isRadar;}public String getRadar() {return Radar;}@JsonProperty("Radar")public void setRadar(String radar) {Radar = radar;}public String getNjd() {return njd;}@JsonProperty("njd")public void setNjd(String njd) {this.njd = njd;}public String getQy() {return qy;}@JsonProperty("qy")public void setQy(String qy) {this.qy = qy;}}

4、实现JacksonRequest

public class JacksonRequest<T> extends Request<T>{private final Listener<T> mListener;private Class<T> mClass;private static ObjectMapper objectMapper = new ObjectMapper();public JacksonRequest(int method, String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener) {super(method, url, errorListener);// TODO Auto-generated constructor stubmListener = listener;mClass = clazz;}public JacksonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener){this(Method.GET, url, clazz, listener, errorListener);}@Overrideprotected Response<T> parseNetworkResponse(NetworkResponse response) {// TODO Auto-generated method stubtry {String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));return Response.success(objectMapper.readValue(jsonString, mClass), HttpHeaderParser.parseCacheHeaders(response));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blockreturn Response.error(new ParseError(e));} catch (JsonParseException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (JsonMappingException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return null;}@Overrideprotected void deliverResponse(T response) {// TODO Auto-generated method stub
        mListener.onResponse(response);}}

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

public class JacksonActivity extends Activity {private RequestQueue requestQueue;private TextView mTvShow;private String result = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_jackson);initView();}public void initView(){mTvShow = (TextView) findViewById(R.id.tv_jackson);requestQueue = Volley.newRequestQueue(getBaseContext());requestQueue.add(jacksonRequest);requestQueue.start();}private JacksonRequest<Weather> jacksonRequest = new JacksonRequest<Weather>("http://www.weather.com.cn/data/sk/101010100.html", Weather.class,new Response.Listener<Weather>() {@Overridepublic void onResponse(Weather response) {// TODO Auto-generated method stubWeatherInfo info = response.getWeatherinfo();result += info.getCity() + "\n" + info.getTemp() + "\n" +info.getTime();mTvShow.setText(result);}}, new Response.ErrorListener(){@Overridepublic void onErrorResponse(VolleyError error) {// TODO Auto-generated method stub
                    mTvShow.setText(error.toString());}});
}

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

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

7、参考博文:

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

转载于:https://www.cnblogs.com/begin1949/p/4925634.html

Android网络开发之Volley--Volley自定义Request相关推荐

  1. Android网络开发之Retrofit+OkHttpClient+RXJava 基本用法演示

    写本文的目的只是为了给需要帮助的朋友提供一个演示,也是记录一下使用这些流行库的基本用法,以便日后用到的时候可以及时找到. 好了,进入正题,关于这三个库的介绍我就不说了,自己百度,先看程序执行效果图: ...

  2. android百度地图定位自定义图标,Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法...

    本文将带你了解Android应用开发之android 百度地图自定义圆,更改默认图标等常用方法,希望本文对大家学Android有所帮助. 总结了一下百度地图常用的方法(前提是集成百度地图环境成功): ...

  3. Android快速开发之appBase——(5).BasePresenter的使用

    转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46456621,请尊重他人的辛勤劳动成果,谢谢! Android快速开发之ap ...

  4. Android 系统(55)---Android App开发之ANR异常的原因分析及处理总结

    Android App开发之ANR异常的原因分析及处理总结 Android App开发之ANR异常的原因分析及处理总结 ANR的全称是application not responding,根据它的意思 ...

  5. Android安全开发之ZIP文件目录遍历

    1.ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在"../"的字符串,攻击者可以利用多个"../"在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原 ...

  6. android 接口实现方法,Android应用开发之Android 请求网络接口实现方法

    本文将带你了解Android应用开发之Android 请求网络接口实现方法,希望本文对大家学Android有所帮助. public   class Fragment01 extends Fragmen ...

  7. android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...

    本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...

  8. android换肤的实现方案,Android应用开发之Android一键换肤功能实现

    本文将带你了解Android应用开发之Android一键换肤功能实现,希望本文对大家学Android有所帮助. < 市面上对数的App都提供换肤功能,这里暂且不讲白天和夜间模式 下图是网易云音乐 ...

  9. Android快速开发之appBase——(4).详解com.snicesoft.Application和BaseActivity

    转载请注明本文出自JFlex的博客http://blog.csdn.net/jflex/article/details/46441571,请尊重他人的辛勤劳动成果,谢谢! Android快速开发之ap ...

最新文章

  1. 都有Python了,还要什么编译器
  2. 20172311-哈夫曼编码测试
  3. 使用 Spring HATEOAS 开发 REST 服务--转
  4. java resources 目录_Maven项目中读取src/main/resources目录下的配置文件的方法
  5. php pdo 缓冲,PDO支持数据缓存_PHP教程
  6. python游戏开发工程师_Python开发工程师-入门与实战视频课程
  7. 如何使用Nginx服务开启HTTP2
  8. (0.2.2)如何下载mysql数据库(二进制、RPM、源码、YUM源)
  9. jquery.form.js的ajaxSubmit和ajaxForm使用
  10. 一寸照片像素是多少?教你一寸照片电子版怎么弄
  11. mysql java驱动 ibm_各种数据库的jdbc驱动下载及连接方式
  12. uniapp在移动端软键盘监听(弹出,收起),及影响定位布局的问题
  13. 诺奖得主:2030年中国帕金森疾病患者将超过美国
  14. beyond compare 强制使用二进制传输,保证文件一样
  15. Excel文件加密后忘记密码破解方法
  16. 资源整理 IC/FPGA
  17. AS运行安装失败,真机提示“软件包似乎无效”问题
  18. Gwallet小百科 | 一文透析腾讯区块链技术
  19. 虚拟主机能做游戏服务器么,虚拟主机做游戏服务器吗
  20. hMailServer搭建邮件服务器,用自己的域名邮箱,酷一些吧

热门文章

  1. 查询数据去除后面无用的0_Python数据分析与实战
  2. 使用Anaconda完全替代官方Python
  3. C++中如何使输出的1变成01
  4. android数据存放map_go语言学习笔记(18)-二维数组和map
  5. C语言实现简单的面向对象例子
  6. Python 数据分析与展示笔记1 -- Numpy 基础
  7. MySQL 笔记8 -- 存储过程和索引
  8. 工业用微型计算机笔记(2)-二进制有符号数
  9. 趣学python3(23)-队列
  10. C指针原理(15)-C指针基础