android:volley在收到403代码时会继续重试

时间:2016-10-04 09:22:21

标签: android android-volley http-response-codes

我还修改了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次。我怎么能阻止它?

1 个答案:

答案 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,导致我的服务器流量巨大!