快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰平台app:Android Volley完全解析之定制自己的Request(2)BR2. 自定义GsonRequest



确定了造访接口后,我们只必要在代码中按照以下的要领来应用XMLRequest即可:

XMLRequest xmlRequest = new XMLRequest(澳门新葡亰平台app

"http://flash.weather.com.cn/wmaps/xml/china.xml",new Response.Listener() {

@Overridepublic void onResponse(XmlPullParser response) {

try {int eventType = response.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {

case XmlPullParser.START_TAG:String nodeName = response.getName();

if ("city".equals(nodeName)) {String pName = response.getAttributeValue(0);

Log.d("TAG", "pName is " + pName);}

break;}

eventType = response.next();}

} catch (XmlPullParserException e) {e.printStackTrace();

} catch (IOException e) {e.printStackTrace();

}}

}, new Response.ErrorListener() {@Override

public void onErrorResponse(VolleyError error) {Log.e("TAG", error.getMessage(), error);

}});

mQueue.add(xmlRequest);

可以看到,这里XMLRequest的用法和StringRequest险些是如出一辙的,我澳门新葡亰平台app们先创建出一个XMLRequest的实例,并把办事器接口地址传入,然后在onResponse()措施中解析相应的XML数据,并把每个省的名字打印出来,着末将这个XMLRequest添加到RequestQueue傍边。

现在运行一下代码,察看节制台日志,就可以看到每个省的名字都从XML中解析出来了,如下图所示。

2. 自定义GsonRequest

JsonRequest的数据解析是使用Android本身自带的JSONObject和JSONArray来实现的,共同应用JSONObject和JSONArray就可以解析出随意率性款式的JSON数据。不过大概你会感觉应用JSONObject照样太麻烦了,还有很多措施可以让JSON数据解析变得加倍简单,比如说GSON。遗憾的是,Volley中默认并不支持应用自家的GSON来解析数据,不过没有关系,经由过程上面的进修,信托你已经知道了自定义一个Request是多么的简单,那么下面我们就来触类旁通一下,自定义一个GsonRequest。

首先我们必要把gson的jar包添加到项目傍边,jar包的下载地址是:https://code.google.com/p/google-gson/downloads/list 。

接着定义一个GsonRequest承袭自Request,代码如下所示:

public class GsonRequest extends Request {

private final Listener mListener;

private Gson mGson;

private Class mClass;

public GsonRequest(int method, String url, Class clazz, Listener listener,

ErrorListener errorListener) {super(method, url, errorListener);

mGson = new Gson();mClass = cla澳门新葡亰平台appzz;

mListener = listener;}

public GsonRequest(String url, Class clazz, Listener listener,

ErrorListener errorListener) {this(Method.GET, url, clazz, listener, errorListener);

}

@Overrideprotected Response parseNetworkResponse(NetworkResponse response) {

try {String jsonString = new String(response.data,

HttpHeaderParser.parseCharset(response.headers));return Response.success(mGson.fromJson(jsonString, mClass),

HttpHeaderParser.parseCacheHeaders(response));} catch (UnsupportedEncodingException e) {

return Response.error(new ParseError(e));}

}

@Overrideprotected void deliverResponse(T response) {

mListener.onResponse(response);}

}

可以看到,Gs澳门新葡亰平台apponRequest是承袭自Request类的,并且同样供给了两个构造函数。在parseNetworkResponse()措施中,先是将办事器相应的数据解析出来,然后经由过程调用Gson的fromJson措施将数据组装成工具。在deliverResponse措施中仍旧是将终极的数据进行回调。

那么下面我们就来测试一下这个GsonRequest能不能够正常事情吧,调用http://www.weather.com.cn/data/sk/101010100.html这个接口可以获得一段JSON款式的气象数据,如下所示:

{"weatherinfo":{"city":"北京","cityid":"101010100","temp":"19","WD":"熏风","WS":"2级","SD":"43%","WSE":"2","time":"19:45","isRadar":"1","Rada澳门新葡亰平台appr":"JC_RADAR_AZ9010_JB"}}

接下来我们应用工具的要领将这段JSON字符串表示出来。新建一个Weather类,代码如下所示:

public class Weather {

private WeatherInfo weatherinfo;

public WeatherInfo getWeatherinfo() {

return weatherinfo;}

public void setWeatherinfo(WeatherInfo weatherinfo) {

this.weatherinfo = weatherinfo;}

}

Weather类中只是引用了WeatherInfo这个类。接着新建WeatherInfo类,代码如下所示:

public class WeatherInfo {

private String city;

private String temp;

private String time;

public String getCity() {

return city;}

public void setCity(String city) {

this.city = city;}

public String getTemp() {

return temp;}

public void setTemp(String temp) {

this.temp = temp;}

public String getTime() {

return time;}

public void setTime(String time) {

this.time = time;}

}

WeatherInfo类中含有city、temp、time这几个字段。下面便是若何调用GsonRequest了,着实也很简单,代码如下所示:

GsonRequest gsonRequest = new GsonRequest(

"http://www.weather.com.cn/data/sk/101010100.html", Weather.class,new Response.Listener() {

@Overridepublic void onResponse(Weather weather) {

WeatherInfo weatherInfo = weather.getWeatherinfo();Log.d("TAG", "city is " + weatherInfo.getCity());

Log.d("TAG", "temp is " + weatherInfo.getTemp());Log.d("TAG", "time is " + weatherInfo.getTime());

}}, new Response.ErrorListener() {

@Overridepublic void onErrorResponse(VolleyError error) {

Log.e("TAG", error.getMessage(), error);}

});mQueue.add(gsonRequest);

可以看到,这里onResponse()措施的回调中直接返回了一个Weather工具,我们经由过程它就可以获得WeatherInfo工具,接着就能从中掏出JSON中的相关数据了。现在运行一下代码,察看节制台日志,打印数据如下图所示:

这样的话,XMLRequest和GsonRequest的功能就基础都实现了,我们也是借助这两个例子深刻地舆解了自定义Request的措施,对Volley的熟识也是加倍深入了。好了,本篇文章就到此停止,下篇文章中我们将对Volley进行更深层次的钻研,感兴趣的同伙请继承涉猎下一篇。

您可能还会对下面的文章感兴趣: