2016-10-04 67 views
1

我也修改了Retry policy,但它不起作用。這裏的代碼:android:volley在收到403代碼時不斷重試

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

嘗試刪除重試策略,如果你不想重試或減少'MAX_RETRIES',即把0. 0 – SripadRaj

+0

MAX_RETRIES默認爲'1'。 –

+0

並且還將'DEFAULT_BACKOFF_MULT'傳遞爲0並嘗試 – SripadRaj

回答

0

問題是「BasicNetwork」類(見註釋塊)

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,並引起了我的情況下,龐大的服務器的流量!

相關問題