2013年7月4日木曜日

Volley を使って XML を処理する

Volley には JsonRequest とか JsonObjectRequest とか用意されているのですが、XML 用(?)のはありません。
残念ながら XML が返ってくる API を利用せねばならない場合もあります。JSON がいいよー。。。

Entity から InputStream を取得して、XmlPullParser を使って parse している処理があったとします。
これの通信部分を Volley を使うようにするには、Request<InputStream> を継承したクラスを作ればいいわけです。
  1. public class InputStreamRequest extends Request<InputStream> {  
  2.   
  3.     private final Listener<inputstream> mListener;  
  4.   
  5.     /** 
  6.      *  
  7.      * @param method 
  8.      * @param url 
  9.      * @param listener 
  10.      * @param errorListener 
  11.      */  
  12.     public InputStreamRequest(int method, String url,   
  13.                                           Listener<InputStream> listener,   
  14.                                           ErrorListener errorListener) {  
  15.         super(method, url, errorListener);  
  16.         mListener = listener;  
  17.     }  
  18.   
  19.     /** 
  20.      *  
  21.      * @param url 
  22.      * @param listener 
  23.      * @param errorListener 
  24.      */  
  25.     public InputStreamRequest(String url, Listener<InputStream> listener,   
  26.                                           ErrorListener errorListener) {  
  27.         this(Method.GET, url, listener, errorListener);  
  28.     }  
  29.   
  30.     @Override  
  31.     protected void deliverResponse(InputStream response) {  
  32.         mListener.onResponse(response);  
  33.     }  
  34.   
  35.     @Override  
  36.     protected Response<InputStream> parseNetworkResponse(NetworkResponse response) {  
  37.         InputStream is = new ByteArrayInputStream(response.data);  
  38.         return Response.success(is, HttpHeaderParser.parseCacheHeaders(response));  
  39.     }  
  40. }  
  41. </inputstream>  
  1. public void doRequest(String url) {  
  2.     InputStreamRequest request = new InputStreamRequest(url,   
  3.        new Listener<InputStream>() {  
  4.   
  5.         @Override  
  6.         public void onResponse(InputStream in) {  
  7.             MyData data = parseXml(in);  
  8.             try {  
  9.                 in.close();  
  10.             } catch (IOException e) {  
  11.                 e.printStackTrace();  
  12.             }  
  13.             if (mListener != null) {  
  14.                 mListener.onParseXml(data);  
  15.             }  
  16.         }  
  17.     }, new ErrorListener() {  
  18.   
  19.         @Override  
  20.         public void onErrorResponse(VolleyError error) {  
  21.             // error  
  22.         }  
  23.     });  
  24.   
  25.     mQueue.add(request);  
  26. }  


Volley の使い方は adamrocker のブログがわかりやすいです 「throw Life : Volley(AndroidのHTTP通信ライブラリ)を使おう」



0 件のコメント:

コメントを投稿