我有以下JSON响应
{ "tag": [ { "listing_count": 5, "listings": [ { "source": "source1", "data": { "image": "image1", "name": "name1" }, "name": "name1" } ] }, { "listing_count": 5, "listings": [ { "source": "source2", "data": { "image": "imag2", "name": "name2" }, "name": "name2" } ] } ] }
我为GSON请求创建了以下类。如何发出GSON请求并使用截击请求存储响应的值。GSON请求应该是什么样的?
public class TagList { ArrayList<Tag> tags; public static class Tag { int listing_count; ArrayList<Listings> listings; public int getListing_count() { return listing_count; } public void setListing_count(int listing_count) { this.listing_count = listing_count; } public ArrayList<Listings> getListings() { return listings; } public void setListings(ArrayList<Listings> listings) { this.listings = listings; } } public static class Listings { String source; Data data; String name; public String getSource() { return source; } public void setSource(String source) { this.source = source; } public Data getData() { return data; } public void setData(Data data) { this.data = data; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public static class Data { String image; String name; public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
只需GsonRequest按以下步骤创建一个类(取自Android Developer Docs)
GsonRequest
public class GsonRequest<T> extends Request<T> { private final Gson gson = new Gson(); private final Class<T> clazz; private final Map<String, String> headers; private final Listener<T> listener; /** * Make a GET request and return a parsed object from JSON. * * @param url URL of the request to make * @param clazz Relevant class object, for Gson's reflection * @param headers Map of request headers */ public GsonRequest(String url, Class<T> clazz, Map<String, String> headers, Listener<T> listener, ErrorListener errorListener) { super(Method.GET, url, errorListener); this.clazz = clazz; this.headers = headers; this.listener = listener; } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers != null ? headers : super.getHeaders(); } @Override protected void deliverResponse(T response) { listener.onResponse(response); } @Override protected Response<T> parseNetworkResponse(NetworkResponse response) { try { String json = new String( response.data, HttpHeaderParser.parseCharset(response.headers)); return Response.success( gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JsonSyntaxException e) { return Response.error(new ParseError(e)); } } }
现在,在您的类文件(活动)中,只需按如下所示调用此类:
RequestQueue queue = MyVolley.getRequestQueue(); GsonRequest<MyClass> myReq = new GsonRequest<MyClass>(Method.GET, "http://JSONURL/", TagList.class, createMyReqSuccessListener(), createMyReqErrorListener()); queue.add(myReq);
我们还需要创建两种方法-
createMyReqSuccessListener()
createMyReqErrorListener()
如下:
private Response.Listener<MyClass> createMyReqSuccessListener() { return new Response.Listener<MyClass>() { @Override public void onResponse(MyClass response) { // Do whatever you want to do with response; // Like response.tags.getListing_count(); etc. etc. } }; }
和
private Response.ErrorListener createMyReqErrorListener() { return new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Do whatever you want to do with error.getMessage(); } }; }
我希望这会有意义。