Android网络开发之Volley--Volley自定义Request
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);
- }
- @Override
- protected void deliverResponse(String response) {
- mListener.onResponse(response);
- }
- @Override
- protected 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 stub
- mListener = listener;
- mClass = clazz;
- }
- public JacksonRequest(String url, Class<T> clazz, Listener<T> listener, ErrorListener errorListener){
- this(Method.GET, url, clazz, listener, errorListener);
- }
- @Override
- protected Response<T> parseNetworkResponse(NetworkResponse response) {
- // TODO Auto-generated method stub
- try {
- 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 block
- return 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;
- }
- @Override
- protected 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 = "";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.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>() {
- @Override
- public void onResponse(Weather response) {
- // TODO Auto-generated method stub
- WeatherInfo info = response.getWeatherinfo();
- result += info.getCity() + "\n" + info.getTemp() + "\n" +info.getTime();
- mTvShow.setText(result);
- }
- }, new Response.ErrorListener(){
- @Override
- public 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/
Android网络开发之Volley--Volley自定义Request的更多相关文章
- Android网络开发之Volley--Volley基本用法ImageRequest(三)
1.ImageRequest用法和StringRequest一样,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置ImageRequest对象参数,并将ImageReque ...
- Android网络开发之Volley--Volley基本用法JsonObjectReques(二)
1.JsonObjectRequest用法 用法和StringRequest基本相同,主要分为3步: (1).实例化一个RequestQueue对象 (2).设置JsonObjectRequest对象 ...
- Android网络开发之Volley--Volley基本用法StringRequest(一)
1.StringRequest用法 主要分为3步: (1).实例化一个RequestQueue对象 (2).设置StringRequest对象参数,并将StringRequest对象加入Request ...
- Android网络开发之OkHttp--基本用法POST
1.OkHttp框架使用了OkIo框架,不要忘记下OkIo.jar 2.通过POST访问网络,和通过GET访问网络基本相同,多了设置请求参数的过程.主要分为五步: (1).声明并实例化一个OkHttp ...
- Android网络开发之OkHttp--基本用法GET
1.OkHttp框架使用了OkIo.jar包,不要忘记添加. 2.对于Request对象是如何实例化的,大家可以参考--java builder设计模式 http://www.cnblogs.com/ ...
- Android 网络开发之WIFI
WIFI就是一种无线联网技术,常见的是使用无线路由器.那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网.如果无线路由器连接了一个ADSL线路或其他的联网线路,则又被称为&qu ...
- Android网络开发之用tcpdump抓包
Android开发过程中,当涉及到网络通信的时候,有一些字段须要抓包获取.我之前由于SSDP设备发现的包头格式没有写对,经过抓包分析和标准包头对照发现了这个困扰我非常久的问题.总之,掌握在Androi ...
- Android网络开发之OkHttp--基本用法实例化各个对象
1.实例化OkHttpClient对象,OkHttpClient包含了以下属性,以及set()和get()方法.但并没有包含具体的执行方法,详情见源码. //实例化OkHttpClent对象 priv ...
- Android网络开发之WIFI
WIFI全称Wireless Fidelity, 又称802.11b标准.WIFI联盟成立于1999年,当时的名称叫做Wireless Ethernet Compatibility Alliance( ...
随机推荐
- openwrt 中make的使用
make 命令简单说明 make V=99 V=99表示输出详细的debug信息 make world 表示编译所有 make j=2 V=99 如是多核CPU,加j=2 选项理论上能加快编译速度 m ...
- MC 在1分钟图拿出5分钟,15分钟,30分钟,1小时的K线
using System; using System.Drawing; using System.Linq; using System.Collections; namespace PowerLang ...
- Underscore.js 的模板功能介绍与应用
Underscore是一个非常实用的JavaScript库,提供许多编程时需要的功能的支持,他在不扩展任何JavaScript的原生对象的情况下提供很多实用的功能,需要了解的朋友可以详细参考下 U ...
- 使用WMware新建linux虚拟机
使用WMware安装linux虚拟机的时候很多人搞不清楚使用什么适配器. 平时也看到很多误人子弟的观点,这里用事实说话. VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络 ...
- keepalived 健康检测
1.TCP方式 详见:http://www.cnblogs.com/tengpan-cn/p/5776574.html 以下内容,都是基于此进行修改 2.HTTP_GET 根据返回状态判断服务器是否正 ...
- 转:SSH原理与运用(二):远程操作与端口转发
作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操作,就是一个例子: $ ssh use ...
- 【纯欧拉函数】 poj 2407
#include <cstdio> #include <iostream> using namespace std; int phi(int x) { int t=x; ;i& ...
- WPF Template模版之DataTemplate与ControlTemplate【一】
WPF Template模版之DataTemplate与ControlTemplate[一] 标签: Wpf模版 2015-04-19 11:52 510人阅读 评论(0) 收藏 举报 分类: -- ...
- java中io对文件操作的简单介绍
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...
- svn删除用户
如果安装有svn客户端,右键打开svn settings 然后就可以重新登录svn用户了 或者删除此文件