android - 如何防止 Volley 请求重试?

标签 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,但它不起作用。

有什么建议吗?

最佳答案

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 中找到它,

所以你可以看到 volley 默认发出 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));

关于android - 如何防止 Volley 请求重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146945/

相关文章:

android - 添加时间时需要以 24 小时格式获取时间

android - 测试字段是否为空并阻止用户保存到 sqlite - android

php - 如何在 Symfony 2 中使用 Behat 和 Mink 测试 REST API

java - JAX-RS、GlassFish、Eclipse。一个简单的网络服务不起作用

java - 带空格的 URL rest api 参数

javascript - 使用 Meteor HTTP 在 Spotify API 上请求 access_token 时出现不支持的授权类型错误

android - 为什么 ".kt"扩展有时可见有时不可见?

python - Selenium:尝试使用 cookie 登录 - "Can only set cookies for current domain"

C# HttpClient POST 请求

Android 识别资源 ID 是可绘制的还是字符串