json解析工具类的引入,这里引用lite马天宇的解析json的工具类:

public class GsonImpl extends Json {
private Gson gson = new Gson(); @Override
public String toJson(Object src) {
return gson.toJson(src);
} @Override
public <T> T toObject(String json, Class<T> claxx) {
return gson.fromJson(json, claxx);
} @Override
public <T> T toObject(byte[] bytes, Class<T> claxx) {
return gson.fromJson(new String(bytes), claxx);
} }
public abstract class Json {
private static Json json; Json() {} public static Json get() {
if (json == null) {
json = new GsonImpl();
}
return json;
} public abstract String toJson(Object src); public abstract <T> T toObject(String json, Class<T> claxx); public abstract <T> T toObject(byte[] bytes, Class<T> claxx);
}

集成子Request,在parseNetworkResponse方法里面封装解析json的逻辑

public class GsonRequest<T> extends Request<T> {
private Class<T> mClazz;
private Listener<T> listener;
private Map<String, String> headers; /**
*
* @param method
* 請求方式
* @param url
* 获取json的url
* @param clazz
* json对应的javaBean
* @param headers
* 头文件
* @param listener
* 监听
* @param errorListener
* 错误监听
*/ public GsonRequest(int method, String url, Class<T> clazz,
Map<String, String> headers, Listener<T> listener,
ErrorListener errorListener) {
super(method, url, errorListener);
this.mClazz = clazz;
this.headers = headers;
this.listener = listener;
} /**
* 获取头文件
*/
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return headers != null ? headers : super.getHeaders();
} /**
* 解析json
*/
@Override
protected Response<T> parseNetworkResponse(NetworkResponse response) {
String jsonString;
try {
jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
return Response.success(
GsonImpl.get().toObject(jsonString, mClazz),
HttpHeaderParser.parseCacheHeaders(response));

} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
}
} /**
* 分发返回内容
*/
@Override
protected void deliverResponse(T response) {
listener.onResponse(response);
}
}

使用demo:

1 ,添加网络权限;

2,编码:

http://www.weather.com.cn/data/sk/101010100.html里面的json数据如下:

{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"9","WD":"西南风","WS":"2级","SD":"22%","WSE":"2","time":"10:45","isRadar":"1","Radar":"JC_RADAR_AZ9010_JB","njd":"暂无实况","qy":"1014"}}

对应的javaBean为如下两个类:

public class Weather implements Serializable{
    private static final long serialVersionUID = 1L;
private Weatherinfo weatherinfo; public Weatherinfo getWeatherinfo() {
return weatherinfo;
} public void setWeatherinfo(Weatherinfo weatherinfo) {
this.weatherinfo = weatherinfo;
} @Override
public String toString() {
return "Weather [weatherinfo=" + weatherinfo + "]";
}
}

和Weatherinfo类:

public class Weatherinfo implements Serializable{

    private static final long serialVersionUID = 1L;
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;
} public void setCity(String city) {
this.city = city;
} public String getCityid() {
return cityid;
} public void setCityid(String cityid) {
this.cityid = cityid;
} public String getTemp() {
return temp;
} public void setTemp(String temp) {
this.temp = temp;
} public String getWD() {
return WD;
} public void setWD(String wD) {
WD = wD;
} public String getWS() {
return WS;
} public void setWS(String wS) {
WS = wS;
} public String getSD() {
return SD;
} public void setSD(String sD) {
SD = sD;
} public String getWSE() {
return WSE;
} public void setWSE(String wSE) {
WSE = wSE;
} public String getTime() {
return time;
} public void setTime(String time) {
this.time = time;
} public String getIsRadar() {
return isRadar;
} public void setIsRadar(String isRadar) {
this.isRadar = isRadar;
} public String getRadar() {
return Radar;
} public void setRadar(String radar) {
Radar = radar;
} public String getNjd() {
return njd;
} public void setNjd(String njd) {
this.njd = njd;
} public String getQy() {
return qy;
} public void setQy(String qy) {
this.qy = qy;
} @Override
public String toString() {
return "Weatherinfo [city=" + city + ", cityid=" + cityid + ", temp="
+ temp + ", WD=" + WD + ", WS=" + WS + ", SD=" + SD + ", WSE="
+ WSE + ", time=" + time + ", isRadar=" + isRadar + ", Radar="
+ Radar + ", njd=" + njd + ", qy=" + qy + "]";
} }

Activity里面:

public class MainActivity extends Activity {
private String url = "http://www.weather.com.cn/data/sk/101010100.html"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RequestQueue mQueue = Volley.newRequestQueue(this);
GsonRequest<Weather> request = new GsonRequest<Weather>(Method.GET, url, Weather.class, null, new Response.Listener<Weather>() { @Override
public void onResponse(Weather response) {
Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_LONG).show();
}
}, new Response.ErrorListener() { @Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
});
mQueue.add(request); }
}

【第四篇】Volley修改之GsonRequest的更多相关文章

  1. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  2. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. 前端工程师技能之photoshop巧用系列第四篇——图片格式

    × 目录 [1]图片格式 [2]保存设置 前面的话 对于前端来说,图片格式是需要重要掌握的知识.本文是photoshop巧用系列第四篇——图片格式 图片格式 目前在前端的开发中常用的图片格式有jpg. ...

  4. 第四篇 SQL Server代理配置数据库邮件

    本篇文章是SQL Server代理系列的第四篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.SQL Serve ...

  5. 第十四篇 Integration Services:项目转换

    本篇文章是Integration Services系列的第十四篇,详细内容请参考原文. 简介在前一篇,我们查看了SSIS变量,变量配置和表达式管理动态值.在这一篇,我们使用SQL Server数据商业 ...

  6. 第四篇 Replication:事务复制-订阅服务器

    本篇文章是SQL Server Replication系列的第四篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  7. 第四篇 Integration Services:增量加载-Updating Rows

    本篇文章是Integration Services系列的第四篇,详细内容请参考原文. 回顾增量加载记住,在SSIS增量加载有三个使用案例:1.New rows-add rows to the dest ...

  8. 第四篇 SQL Server安全权限

    本篇文章是SQL Server安全系列的第四篇,详细内容请参考原文. 权限授予主体访问对象,以执行某些操作.SQL Server有大量你可以授予给主体的权限,你甚至可以拒绝或回收权限.这听起来有点复杂 ...

  9. [老老实实学WCF] 第四篇 初探通信--ChannelFactory

    老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...

随机推荐

  1. SQL 网文链接

    使用自定义表类型(SQL Server 2008) http://www.cnblogs.com/chenxizhang/archive/2009/04/28/1445234.html

  2. .Net多线程编程—同步机制

    1.简介 新的轻量级同步原语:Barrier,CountdownEvent,ManualResetEventSlim,SemaphoreSlim,SpinLock,SpinWait.轻量级同步原语只能 ...

  3. 四、spark常用函数说明学习

    1.parallelize       并行集合,切片数.默认为这个程序所分配到的资源的cpu核的个数.       查看大小:rdd.partitions.size      sc.paraliel ...

  4. USB调试不能弹出授权窗口 unauthorized 的解决办法

    今天把 AndroidStudio 1.5 给卸载了,重新安装 2.1版本,据说速度快了很多,结果手机一直没法授权调试,授权USB调试信任PC设备的窗口始终没看到,网上找了好多方法,什么驱动.重启.各 ...

  5. 剑指offer ------ 刷题总结

    面试题3 -- 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1. 每行中的整数从左到右是排序的. 2. 每行的第一个数大于上一行的最后一个整数. publi ...

  6. java MD5 加密

    使用javaMD5.jar ========================================== 使用java的security类 ========================== ...

  7. 关于64位win7环境下VS连接oracle数据库的问题

    本机环境:64位win7,安装了64位的oracle桌面类 服务器环境:64位windows server 2008,64位oracle服务器端 问题:本机用sql developer连数据库没有问题 ...

  8. Ubuntu中Qt5.7.0无法输入中文

    把libfcitxplatforminputcontextplugin.so复制到安装的Qt目录下的两个文件夹中 sudo apt install fcitx-frontend-qt5 sudo cp ...

  9. mysql vachar

    --本文在CSDN文章的基础加以补充 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,va ...

  10. Ubuntu14.04安装PHP5

    因为任务需要在Ubuntu14.04的server版本下安装PHP5,所以总结一下   使用root进行安装  要么在前面加上sudo进行安装. apt-get install php5-cgi ap ...