我还修改了Retry policy
,但它无效。这是代码:
JsonObjectRequest getReq = new JsonObjectRequest(Request.Method.GET, GET_URL, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//bluh..
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<>();
headers.put("Authorization", token);
return headers;
}
};getReq.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
AppController.getInstance().addToRequestQueue(getReq);
有时它会重复6次。我怎么能阻止它?
答案 0 :(得分:0)
问题出在&#34; BasicNetwork&#34; class(参见注释掉的块)
if (responseContents != null) {
networkResponse = new NetworkResponse(statusCode, responseContents,
responseHeaders, false, SystemClock.elapsedRealtime() - requestStart);
// 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);
}
此实现违反了RFC,导致我的服务器流量巨大!