如何禁用Volley请求重试?

时间:2014-04-18 03:31:13

标签: android rest http-post android-volley

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

我试过了:

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

我已经替换了TIMEOUT_MS = 0,RETRIES = 0,甚至BACKOFF_MULT = 0,但它不起作用。

还有其他建议吗?

3 个答案:

答案 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。

第三个参数是默认值。