残念ながら 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 件のコメント:
コメントを投稿