天天看点

java android 响应码304_android – 响应代码304和200时的Volley异常错误

Miguel-这种方法只有在成功响应时才被调用吗?

对于所有状态代码< 200或状态代码> 200 volley调用parseNetworkError(VolleyError volleyError)而不是parseNetworkResponse(NetworkResponse response)方法.看这里 –

行号-118-120

if (statusCode < 200 || statusCode > 299) {

throw new IOException();

}

和相应的catch块行号 – 128 -151

catch (IOException e) {

int statusCode = 0;

NetworkResponse networkResponse = null;

if (httpResponse != null) {

statusCode = httpResponse.getStatusLine().getStatusCode();

} else {

throw new NoConnectionError(e);

}

VolleyLog.e("Unexpected response code %d for %s", statusCode, request.getUrl());

if (responseContents != null) {

networkResponse = new NetworkResponse(statusCode, responseContents,

responseHeaders, false);

if (statusCode == HttpStatus.SC_UNAUTHORIZED ||

statusCode == HttpStatus.SC_FORBIDDEN) {

attemptRetryOnException("auth",

request, new AuthFailureError(networkResponse));

} else {

// TODO: Only throw ServerError for 5xx status codes.

throw new ServerError(networkResponse);

}

} else {

throw new NetworkError(networkResponse);

}

}

如果要覆盖此行为,可以在BasicNetwork.java-> performRequest方法中添加特定于状态代码的实现.

编辑:

所以它不是因为状态代码而是因为空响应.好吧,我认为你正在做正确的事情来实现你的自定义Request类.

Volley附带了一些易于使用的预定义流行类型请求,但您可以随时创建自己的.

而不是基于状态代码的实现,我宁愿在解反序之前检查以下字符串是否为空 –

String jsonString = new String(response.data,

HttpHeaderParser.parseCharset(response.headers));

if (!jsonString .isEmpty()) {

return Response.success(new JSONObject(jsonString),

HttpHeaderParser.parseCacheHeaders(response));

}

else {

return Response.success(new JSONObject(),

HttpHeaderParser.parseCacheHeaders(response));

}

**没有测试过这个,但是你明白了:)