Volley 自定义XMLRequest和GSONRequest

来源:互联网 发布:马士兵大数据视频 编辑:程序博客网 时间:2024/06/08 09:56

1 自定义一个 获取XML的请求


  1. public class XMLRequest extends Request<XmlPullParser> {  
  2.   
  3.     private final Listener<XmlPullParser> mListener;  
  4.   
  5.     public XMLRequest(int method, String url, Listener<XmlPullParser> listener,  
  6.             ErrorListener errorListener) {  
  7.         super(method, url, errorListener);  
  8.         mListener = listener;  
  9.     }  
  10.   
  11.     public XMLRequest(String url, Listener<XmlPullParser> listener, ErrorListener errorListener) {  
  12.         this(Method.GET, url, listener, errorListener);  
  13.     }  
  14.   
  15.     @Override  
  16.     protected Response<XmlPullParser> parseNetworkResponse(NetworkResponse response) {  
  17.         try {  
  18.             String xmlString = new String(response.data,  
  19.                     HttpHeaderParser.parseCharset(response.headers));  
  20.             XmlPullParserFactory factory = XmlPullParserFactory.newInstance();  
  21.             XmlPullParser xmlPullParser = factory.newPullParser();  
  22.             xmlPullParser.setInput(new StringReader(xmlString));  
  23.             return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response));  
  24.         } catch (UnsupportedEncodingException e) {  
  25.             return Response.error(new ParseError(e));  
  26.         } catch (XmlPullParserException e) {  
  27.             return Response.error(new ParseError(e));  
  28.         }  
  29.     }  
  30.   
  31.     @Override  
  32.     protected void deliverResponse(XmlPullParser response) {  
  33.         mListener.onResponse(response);  
  34.     }  
  35.   
  36. }  

调用自己的XMLRequest

  1. XMLRequest xmlRequest = new XMLRequest(  
  2.         "http://flash.weather.com.cn/wmaps/xml/china.xml",  
  3.         new Response.Listener<XmlPullParser>() {  
  4.             @Override  
  5.             public void onResponse(XmlPullParser response) {  
  6.                 try {  
  7.                     int eventType = response.getEventType();  
  8.                     while (eventType != XmlPullParser.END_DOCUMENT) {  
  9.                         switch (eventType) {  
  10.                         case XmlPullParser.START_TAG:  
  11.                             String nodeName = response.getName();  
  12.                             if ("city".equals(nodeName)) {  
  13.                                 String pName = response.getAttributeValue(0);  
  14.                                 Log.d("TAG""pName is " + pName);  
  15.                             }  
  16.                             break;  
  17.                         }  
  18.                         eventType = response.next();  
  19.                     }  
  20.                 } catch (XmlPullParserException e) {  
  21.                     e.printStackTrace();  
  22.                 } catch (IOException e) {  
  23.                     e.printStackTrace();  
  24.                 }  
  25.             }  
  26.         }, new Response.ErrorListener() {  
  27.             @Override  
  28.             public void onErrorResponse(VolleyError error) {  
  29.                 Log.e("TAG", error.getMessage(), error);  
  30.             }  
  31.         });  
  32. mQueue.add(xmlRequest);  


2 自定义一个GSONRequest

  1. public class GsonRequest<T> extends Request<T> {  
  2.   
  3.     private final Listener<T> mListener;  
  4.   
  5.     private Gson mGson;  
  6.   
  7.     private Class<T> mClass;  
  8.   
  9.     public GsonRequest(int method, String url, Class<T> clazz, Listener<T> listener,  
  10.             ErrorListener errorListener) {  
  11.         super(method, url, errorListener);  
  12.         mGson = new Gson();  
  13.         mClass = clazz;  
  14.         mListener = listener;  
  15.     }  
  16.   
  17.     public GsonRequest(String url, Class<T> clazz, Listener<T> listener,  
  18.             ErrorListener errorListener) {  
  19.         this(Method.GET, url, clazz, listener, errorListener);  
  20.     }  
  21.   
  22.     @Override  
  23.     protected Response<T> parseNetworkResponse(NetworkResponse response) {  
  24.         try {  
  25.             String jsonString = new String(response.data,  
  26.                     HttpHeaderParser.parseCharset(response.headers));  
  27.             return Response.success(mGson.fromJson(jsonString, mClass),  
  28.                     HttpHeaderParser.parseCacheHeaders(response));  
  29.         } catch (UnsupportedEncodingException e) {  
  30.             return Response.error(new ParseError(e));  
  31.         }  
  32.     }  
  33.   
  34.     @Override  
  35.     protected void deliverResponse(T response) {  
  36.         mListener.onResponse(response);  
  37.     }  
  38.   


使用自定义的GSONRequest

需要一个Weather的类


  1. GsonRequest<Weather> gsonRequest = new GsonRequest<Weather>(  
  2.         "http://www.weather.com.cn/data/sk/101010100.html", Weather.class,  
  3.         new Response.Listener<Weather>() {  
  4.             @Override  
  5.             public void onResponse(Weather weather) {  
  6.                 WeatherInfo weatherInfo = weather.getWeatherinfo();  
  7.                 Log.d("TAG""city is " + weatherInfo.getCity());  
  8.                 Log.d("TAG""temp is " + weatherInfo.getTemp());  
  9.                 Log.d("TAG""time is " + weatherInfo.getTime());  
  10.             }  
  11.         }, new Response.ErrorListener() {  
  12.             @Override  
  13.             public void onErrorResponse(VolleyError error) {  
  14.                 Log.e("TAG", error.getMessage(), error);  
  15.             }  
  16.         });  
  17. mQueue.add(gsonRequest);  

0 0
原创粉丝点击