如何禁用重试排球请求?

我发布了一个JsonRequest到服务器。 服务器很慢。 Volley倾向于多次调用慢速服务器,因为它没有得到第一个请求的响应(因为我的服务器很慢)。 有什么办法可以禁止Volley重试请求,以便它可以收到第一个响应?

我努力了:

myRequest.setRetryPolicy(new DefaultRetryPolicy( TIMEOUT_MS, RETRIES, BACKOFF_MULT)); 

我已经replaceTIMEOUT_MS = 0,RETRIES = 0,甚至BACKOFF_MULT = 0,但它不起作用。

还有其他build议吗?

Volley默认重试策略是:

 /** The default socket timeout in milliseconds */ public static final int DEFAULT_TIMEOUT_MS = 2500; /** The default number of retries */ public static final int DEFAULT_MAX_RETRIES = 1; /** The default backoff multiplier */ public static final float DEFAULT_BACKOFF_MULT = 1f; 

你可以在DefaultRetryPolicy.java中find它,

所以你可以看到,排除默认1次重试请求。

尝试使用更小的TIMEOUT(如果您不想等待2500毫秒),或者大于2500毫秒以获得答案),但保留其他值,例如:

 // Wait 20 seconds and don't retry more than once myRequest.setRetryPolicy(new DefaultRetryPolicy( (int) TimeUnit.SECONDS.toMillis(20), DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

要停止Volley重试请求,只需将请求的重试策略设置为DefaultRetryPolicy其中maxNumRetries为0:

 myRequest.setRetryPolicy(new DefaultRetryPolicy( DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, // maxNumRetries = 0 means no retry DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

尝试这个,

 // remove caching jsObjRequest.setShouldCache(false); // Wait 30 seconds and don't retry more than once jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(0, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

方法调用表单任务

 public void callWebService(JSONObject jsonRequest) { JsonObjectRequest jsObjRequest = new JsonObjectRequest( Request.Method.POST, url + pageurl, jsonRequest, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { sendResponse(jsonObject); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { callBack.onError(error); try { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } catch (Exception e) { Helper.customPrintStackTrace(e); } } } ) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put(WebConfig.WebParams.APIKEY, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_APIKEY)); params.put(WebConfig.WebParams.APITOKEN, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_APITOKEN)); if (!Helper.getStringValuefromPrefs(context, SharedPreferencesKey.PREF_USERID).equals("")) { params.put(WebConfig.WebParams.USER_ID, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_USERID)); } else { params.put(WebConfig.WebParams.USER_ID, "0"); } return params; } }; // remove caching jsObjRequest.setShouldCache(false); // Wait 30 seconds and don't retry more than once jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(0, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // Access the RequestQueue through your singleton class. VolleySingleton.getInstance(context).addToRequestQueue(jsObjRequest); if (showDefultProcess) { progressDialog.show(); } }