当前位置: 首页 > 知识库问答 >
问题:

当重试策略设置为0时,Android Volley向服务器发出2个请求

子车安和
2023-03-14

我正在从事一个Android项目,该项目使用Volley进行异步请求和图像缓存。即使重试策略设置为0,请求也会两次命中服务器。我尝试重写DefaultRetryPolicy对象中的值,但没有成功。下面是一些示例代码:

请求:

@Override
public void gravarVendaMobile(final Usuario usuarioAutenticado, final AsyncCallback<String> callback) {
    obterParametrosDeInicializacao().done(new DoneCallback<ParametrosDeInicializacao>() {
        @Override
        public void onDone(final ParametrosDeInicializacao param) {
            requestQueue.add(setDefaultRetryPolicy(new StringRequest(
                    Method.POST,
                    urlPara(GRAVAR_VENDA_MOBILE, usuarioAutenticado.getFilial(), usuarioAutenticado.getCodigo()),
                    listener(callback),
                    //errorListener(R.string.could_not_load_produtos, callback)
                    new ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            callback.onError(new MessageCodeException(error.networkResponse.statusCode, error));
                        }
                    }
            ) {

                @Override
                public Map<String, String> getHeaders() throws AuthFailureError {
                    Map<String, String> headers = new HashMap<String, String>();
                    headers.put("Encoding", "UTF-8");
                    headers.put("Accept", "application/json");
                    headers.put("Content-type", "application/json; charset=UTF-8");
                    return headers;
                }


            }));
        }
    });
}

重试政策:

private Request<?> setDefaultRetryPolicy(Request<?> request) {
    request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    return request;
}

基本上,我想将超时设置为30秒,并重试0次。

如果我增加重试次数,它将按预期工作,但如果我将其设置为0,它将发出2个请求。

这里需要帮助。

编辑

我通过在android内部将keep-alive属性设置为false来解决我的问题。如:

System.setProperty("http.keepAlive", "false");

我在类中添加了这行代码,在那里我导入请求队列并发出请求。

此外,请检查服务器是否具有保活报头。

这篇文章有助于解决问题。

共有3个答案

法镜
2023-03-14

只需将超时设置为20秒或更长,然后重试0

req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0,
  DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
燕翔飞
2023-03-14

我使用此设置不重复策略:

    myRequest.setRetryPolicy(new DefaultRetryPolicy(0,
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
葛宪
2023-03-14

DefaultRetryPolicy。类的hasAttemptRemaining()类如下所示:

protected boolean hasAttemptRemaining() {
    return this.mCurrentRetryCount <= this.mMaxNumRetries;
}

从我所看到的情况来看,如果maxNumRetries设置为0,那么如果它还没有重试,那么它仍然会返回true。

我用螺丝钉把它修好了

request.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0);
 类似资料:
  • 像组件一样,服务通常需要依赖,Angular通过服务类的构造函数注入。由于我们在Angular的引导过程之外初始化这些类,我们必须自己显式注入这些依赖。这是通过使用TestBed配置测试模块传回所需的依赖项(如HTTP模块)来实现的。

  • 我有广播接收器 但是服务不启动,当我启动我的设备日志log.d(“test”,“start”);不要显示我如何修复它?

  • 目前,我有一个变量来指示标记刷新是否在中进行,在这种情况下,我取消中的所有后续请求,用户必须手动刷新页面,否则我可以注销用户并强制用户登录。 对于上述问题,使用OKHTTP3.x for Android有什么好的解决方案或架构? 编辑:我想解决的问题是一般的,我不想顺序我的电话。也就是说,等待一个调用完成并刷新令牌,然后只在活动和片段级别上发送请求的其余部分。

  • 问题内容: 当我在Node服务器上打印请求的内容时,在任何地方都看不到用户数据。 这是我的节点服务器: 这是Angular2代码: 任何人都可以帮我或解释如何处理角度的http请求。 问题答案: 那是你的服务器: 那是您的有角度的客户: 回购https://github.com/kuncevic/angular-httpclient- examples

  • XMLHttpRequest 对象用于和服务器交换数据。 向服务器发送请求 如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法:xmlhttp.open("GET","ajax_info.txt",true); xmlhttp.send(); 方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理

  • 创建 Yubikey PAM 验证策略 获取 YubiKey 的令牌 ID Yubikey 令牌 ID 是唯一标识 YubiKey 的公共标识符。您可以通过多种方式获取 Yubikey 令牌ID。 最简单的方法是移除 Yubikey 生成的一次性密码的最后 32 位: 打开一个终端. 长按 Yubikey. 一个一次性密码会输入到终端中: ❯ cccccccgklgcvnkcvnnegrnhgrj