我将JsonRequest发布到服务器。服务器很慢。 Volley倾向于多次调用慢速服务器,因为它没有从第一个请求得到响应(因为我的服务器很慢)。有没有办法禁止Volley重试请求,以便它可以收到第一个响应?
我试过了:
myRequest.setRetryPolicy(new DefaultRetryPolicy(
TIMEOUT_MS,
RETRIES,
BACKOFF_MULT));
我已经替换了TIMEOUT_MS = 0,RETRIES = 0,甚至BACKOFF_MULT = 0,但它不起作用。
还有其他建议吗?
答案 0 :(得分:40)
排球默认重试政策是:
/** 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));
因此,要禁止Volley重试,您需要执行以下操作:
myRequest.setRetryPolicy(new DefaultRetryPolicy(
(int) TimeUnit.SECONDS.toMillis(20), //After the set time elapses the request will timeout
0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
答案 1 :(得分:4)
要阻止Volley重试请求,只需将请求的重试策略设置为DefaultRetryPolicy
,其中maxNumRetries
为0:
myRequest.setRetryPolicy(new DefaultRetryPolicy(
DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
0, // maxNumRetries = 0 means no retry
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
答案 2 :(得分:1)
使用您的 StringRequest 对象或 JsonObjectRequest 对象或 JsonArrayRequest 对象调用此方法。
例如,如果对象是StringRequest的实例,则此方法为:
stringRequest.setRetryPolicy(new DefaultRetryPolicy(initialTimeoutMs, maxNumRetries,
backoffMultiplier ));
initialTimeoutMs 该策略的初始超时。
maxNumRetries 。最大重试次数。
backoffMultiplier 策略的补偿倍数。
下面是我给的参数。
stringRequest.setRetryPolicy(new DefaultRetryPolicy(10 * 1000, 0,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
第一个参数表示将InitialTimeout设置为10秒。
第二个参数表示设置重试次数尝试为0。
第三个参数是默认值。