【问题标题】:How to get the JSONObject server response in Volley如何在 Volley 中获取 JSONObject 服务器响应
【发布时间】:2014-01-18 21:22:45
【问题描述】:
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;
}

理想情况下,我想自己解析响应,但我对如何让 executeGet 方法返回服务器响应一无所知。

【问题讨论】:

    标签: android android-volley


    【解决方案1】:

    您需要扩展请求类并在您的自定义请求类中覆盖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);      
        }        
    }
    

    【讨论】:

    • 我有时会在从字节数组创建字符串时遇到内存不足错误...这是以最低开销执行此操作的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多