2014-01-18 36 views
1
protected JSONObject executeGet(String URL) throws CloudAppException { 
    JSONObject response = new JSONObject(); 
    JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, URL, null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject serverResponse) { 
        try { 
         response = serverResponse; 
         VolleyLog.v("Response:%n %s", serverResponse.toString(4)); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.e("Error: ", error.getMessage()); 
     } 
    }); 

    RequestHandler.addToRequestQueue(req); 

    return response; 
} 

的JSONObject的服务器响应理想情况下,我想分析我自己的反应,但我消隐为如何让executeGet方法返回服务器的响应。如何让排球

回答

2

您需要扩展请求类,并在您的自定义请求类中覆盖parseNetworkResponse方法并执行您自己的解析。

这里有一个例子:

public class CustomRequest extends Request { 
    // the response listener 
    private Response.Listener listener; 

    public CustomRequest(int requestMethod, String url, Response.Listener responseListener, Response.ErrorListener errorListener) { 
     super(requestMethod, url, errorListener); // Call parent constructor 
     this.listener = responseListener; 
    } 

    // Same as JsonObjectRequest#parseNetworkResponse 
    @Override 
    protected Response parseNetworkResponse(NetworkResponse response) { 
     try { 
      String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 

    @Override 
    public int compareTo(Request other) { 
     return 0; 
    } 

    @Override 
    protected void deliverResponse(Object response) { 
     if (listener!=null) 
      listener.onResponse(response);  
    }   
} 
+0

我有时会收到一个内存不足的错误,有时从字节数组创建字符串的...这是最低的开销这样做的方法是什么? –