残念ながら XML が返ってくる API を利用せねばならない場合もあります。JSON がいいよー。。。
Entity から InputStream を取得して、XmlPullParser を使って parse している処理があったとします。
これの通信部分を Volley を使うようにするには、Request<InputStream> を継承したクラスを作ればいいわけです。
- public class InputStreamRequest extends Request<InputStream> {
- private final Listener<inputstream> 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));
- }
- }
- </inputstream>
- 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 件のコメント:
コメントを投稿