使用Volley处理JSONRequest中的空响应

cod*_*der 14 android android-volley

我正在使用我的应用程序中Volley提出POST请求,在我的情况下,一个很好的响应是一个201空洞的身体.我正在使用JSONRequest,拨打电话.

我的问题是错误响应处理程序被调用,因为响应为空.

以下是我的要求:

    Request request = new JsonRequest<Object>(Request.Method.POST, url, body, new Response.Listener<Object>() {

        @Override
        public void onResponse(Object response) {

        }
    }, new ErrorListener(context)) {

        @Override
        protected Response<Object> parseNetworkResponse(NetworkResponse response) {

            Log.d(TAG, "success!!!!!!");
            if (response.statusCode == 201)
                mListener.resetPasswordWasSent();
            return null;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String,String> params = new HashMap<String, String>();
            params.put("Content-Type","application/json");
            params.put("Accept", "application/json");
            return params;
        }
    };

    requestQueue.add(request);
Run Code Online (Sandbox Code Playgroud)

我的parseNetworkResponse函数获取调用,那么ErrorListener,和onResponse因为我得到一个方法永远不会命中NullPointerExceptionErrorListener.

我可以忽略NullPointerException我的错误监听器,但我不愿意.显然,我可以简单地发送我的回调parseNetworkResponse,但我不希望弹出任何错误.

有谁知道我应该如何处理这个?

编辑: 这是堆栈跟踪:

05-06 09:44:19.586  27546-27560/com.threepoundhealth.euco E/Volley? [1830] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
    java.lang.NullPointerException
    at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:126)
Run Code Online (Sandbox Code Playgroud)

小智 14

你可以尝试像这样破解.创建一个JsonObjectRequest子类,覆盖该parseNetworkResponse方法并检查响应数据,如果它是空的byte[],则用byte[]空json的表示替换数据{}.

public class VolleyJsonRequest extends JsonObjectRequest {

    ...

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            if (response.data.length == 0) {
                byte[] responseData = "{}".getBytes("UTF8");
                response = new NetworkResponse(response.statusCode, responseData, response.headers, response.notModified);
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return super.parseNetworkResponse(response);
    }    
}
Run Code Online (Sandbox Code Playgroud)


Mar*_* RS 7

您可以使用StringRequest.将使用空字符串""调用您的侦听器.