我正在请求使用凌空调用服务器,但有时当网络中存在延迟时,它再次向服务器发出请求。
但是根据我的要求,它应该只调用服务器一次,而不管服务器的响应如何。
答案 0 :(得分:1)
public RetryPolicy myRetryPolicy(){
return new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 10000;
}
@Override
public int getCurrentRetryCount() {
return 0;
}
@Override
public void retry(VolleyError error) throws VolleyError {
Log.d(TAG, "Volley Error " + error.toString());
throw new VolleyError("Do Not Retry");
}
};
}
如果您设置了自定义RetryPolicy,请在重试方法中抛出VolleyError。排球从未重演。
postRequest.setRetryPolicy(myRetryPolicy());
<强> logcat的强>
11-05 13:00:36.078 6014-6314 / ******:Volley Error com.android.volley.TimeoutError 11-05 13:00:36.079 6014-6014 / *******:Volley Error com.android.volley.VolleyError:不要重试
答案 1 :(得分:0)
排球默认重试政策是:
/** 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
,
因此您可以看到默认情况下凌空发出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));