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( ...
随机推荐
- hud 2549 壮志难酬
Problem Description 话说MCA山上各路豪杰均出山抗敌,去年曾在江湖威名显赫的,江湖人称<万军中取上将首级舍我其谁>的甘露也不甘示弱,“天将降大任于斯人也,必先劳其筋骨, ...
- android动态添加TextView或者ImageView
动态添加 text1=new TextView(this); text1.setText("动态添加"); ((LinearLayout) this.findViewById(R. ...
- C#常用集合的使用
大多数集合都在System.Collections,System.Collections.Generic两个命名空间.其中System.Collections.Generic专门用于泛型集合. 针对特 ...
- 解决Sublime Text 3中文显示乱码(tab中文方块)问题,sublime tab乱码
一.文本出现中文乱码问题 1.打开Sublime Text 3,按Ctrl+-打开控制行,复制粘贴以下python代码,然后回车运行. 2. 复制并粘贴如下代码: import urllib.requ ...
- think in uml 2.1
业务建模
- Git 版本管理基本操作
Git是一个版本管理操作的工具 非常N,可以很智能的分布式管理, 本网站学习笔记 来自于廖雪峰老师的内容借鉴 安装 yum -y install git 本地设置全局 告知是谁提交代码 信息 # gi ...
- CodeForces 567B Berland National Library hdu-5477 A Sweet Journey
这类题一个操作增加多少,一个操作减少多少,求最少刚开始为多少,在中途不会出现负值,模拟一遍,用一个数记下最大的即可 #include<cstdio> #include<cstring ...
- NSAttributedString in Swift
转载自: https://www.invasivecode.com/weblog/attributed-text-swift/ I have been talking quite a lot in ...
- Android实现GIF图片解码与播放
Android实现GIF图片解码与播放 如何在Android中播放GIF图片呢?如果直接按以前的方法,分解图片,可能相对比较麻烦. 今天给大伙介绍一种新的方式,构造自己的Android图片解码帮助类, ...
- java 数据结构 栈的实现
java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...