2013年7月4日木曜日

Volley を使って XML を処理する

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

Entity から InputStream を取得して、XmlPullParser を使って parse している処理があったとします。
これの通信部分を Volley を使うようにするには、Request<InputStream> を継承したクラスを作ればいいわけです。 public class InputStreamRequest extends Request<InputStream> { private final Listener mListener; /** * * @param method * @param url * @param listener * @param errorListener */ public InputStreamRequest(int method, String url, Listener<InputStream> listener, ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } /** * * @param url * @param listener * @param errorListener */ public InputStreamRequest(String url, Listener<InputStream> listener, ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected void deliverResponse(InputStream response) { mListener.onResponse(response); } @Override protected Response<InputStream> parseNetworkResponse(NetworkResponse response) { InputStream is = new ByteArrayInputStream(response.data); return Response.success(is, HttpHeaderParser.parseCacheHeaders(response)); } } public void doRequest(String url) { InputStreamRequest request = new InputStreamRequest(url, new Listener<InputStream>() { @Override public void onResponse(InputStream in) { MyData data = parseXml(in); try { in.close(); } catch (IOException e) { e.printStackTrace(); } if (mListener != null) { mListener.onParseXml(data); } } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // error } }); mQueue.add(request); }

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



0 件のコメント:

コメントを投稿