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. C++ 头文件系列(queue)

    简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的 ...

  2. ipad 横屏 竖屏 CSS

    /* iPads (landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-devic ...

  3. webpack学习笔记—webpack安装、基本配置

    文章结构: 什么是webpack? 安装webpack 'webpack基本配置 一.什么是webpack? 在学习react时发现大部分文章都是react和webpack结合使用的,所以在学reac ...

  4. ACM沈化校赛

    答对两道题,因为比赛经验原因明明可以对四道,在这两道题又浪费过多时间,成绩不理想,但也是累积了一下经验.

  5. Spark编程模型及RDD操作

    转载自:http://blog.csdn.net/liuwenbo0920/article/details/45243775 1. Spark中的基本概念 在Spark中,有下面的基本概念.Appli ...

  6. Scala减少代码重复

    高阶函数可以把其它函数当作函数参数,帮助我们减少代码重复,例如: object FileMatcher { private def fileHere = (new File(".\\file ...

  7. 如何让有物理键的手机在ActionBar始终显示更多菜单menu键

    仅作记录代码用,功能未能测试成功,在低版本上不存在 sHasPermanentMenuKey 属性,会出现 java.lang.NoSuchFieldException: sHasPermanentM ...

  8. C++ static与单例模式

    单例模式是应用最多的一种设计模式,它要求系统中每个类有且只能有一个实例对象. 主要优点: 1.提供了对唯一实例的受控访问. 2.由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创 ...

  9. Openwrt 初始化脚本

    Openwrt 使用自己的初始化脚本系统,所有的初始化脚本位于 /etc/init.d 目录下. 任何一个初始化脚本必须包含基本的 start() 和 stop() 函数.当系统启动或用户拉起对应的进 ...

  10. Elastarchsearch安装搭建(一)

    Elasticsearch是一个实时分布式搜索和分析引擎.一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全 ...