问题描述
我在应用程序中使用Volley
发出POST
请求,对于我来说,一个很好的响应是带有空主体的201
.我正在使用JSONRequest
拨打电话.
I'm using Volley
to make a POST
request in my application, and in my case, a good response is a 201
with an empty body. I'm using a JSONRequest
, to make the call.
我的问题是由于响应为空,因此调用了错误响应处理程序.
My problem is that the error response handler is getting called because response is empty.
以下是我的要求:
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);
我的parseNetworkResponse
函数被调用,然后ErrorListener
和onResponse
方法从不被命中,因为我在ErrorListener
中得到了NullPointerException
.
My parseNetworkResponse
function is getting called, then the ErrorListener
, and the onResponse
method never gets hits because I get a NullPointerException
in the ErrorListener
.
我可以在错误侦听器中忽略NullPointerException
,但我不想这样做.显然,我可以简单地在parseNetworkResponse
中发送回调,但是我不想弹出任何错误.
I can ignore the NullPointerException
in my error listener, but I'd prefer not to. Obviously, I can simply send my callback in the parseNetworkResponse
, but I don't want to have any errors popping up.
有人知道我该怎么处理吗?
Anyone know how I should handle this?
这是堆栈跟踪:
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)
推荐答案
您可以尝试像这样黑客入侵.创建一个JsonObjectRequest子类,重写parseNetworkResponse
方法并检查响应数据(如果它为空的byte[]
),将数据替换为空json {}
的byte[]
表示形式.
You could try to hack like this. Create a JsonObjectRequest subclass, override the parseNetworkResponse
method and check the response data, if it is an empty byte[]
,replace the data with byte[]
representation of a empty 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);
}
}
这篇关于使用Volley处理JSONRequest中的空响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!