making a GSON request using volley

后端 未结 3 470
既然无缘
既然无缘 2020-12-12 21:37

I have the following json response

{
  \"tag\": [
    {
      \"listing_count\": 5,
      \"listings\": [
        {
          \"source\": \"source1\",
               


        
3条回答
  •  北荒
    北荒 (楼主)
    2020-12-12 21:59

    Just create a GsonRequest Class as follows (taken from Android Developer Docs)

    public class GsonRequest extends Request {
    private final Gson gson = new Gson();
    private final Class clazz;
    private final Map headers;
    private final Listener 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 clazz, Map headers,
            Listener listener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.clazz = clazz;
        this.headers = headers;
        this.listener = listener;
    }
    
    @Override
    public Map getHeaders() throws AuthFailureError {
        return headers != null ? headers : super.getHeaders();
    }
    
    @Override
    protected void deliverResponse(T response) {
        listener.onResponse(response);
    }
    
    @Override
    protected Response 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));
        }
    }
    } 
    

    Now in your class file (Activity) just call the this class as follows:

    RequestQueue queue = MyVolley.getRequestQueue();
    GsonRequest myReq = new GsonRequest(Method.GET,
                                                        "http://JSONURL/",
                                                        TagList.class,
                                                        createMyReqSuccessListener(),
                                                        createMyReqErrorListener());
    
                queue.add(myReq);
    

    We also need to create two methods -

    1. createMyReqSuccessListener() - receive the response from GsonRequest
    2. createMyReqErrorListener() - to handle any error

    as follows:

    private Response.Listener createMyReqSuccessListener() {
        return new Response.Listener() {
            @Override
            public void onResponse(MyClass response) {
               // Do whatever you want to do with response;
               // Like response.tags.getListing_count(); etc. etc.
            }
        };
    }
    

    and

    private Response.ErrorListener createMyReqErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // Do whatever you want to do with error.getMessage();
            }
        };
    }
    

    I hope it will make some sense.

提交回复
热议问题