美文网首页
volley超时和重复请求问题

volley超时和重复请求问题

作者: 黄海佳 | 来源:发表于2017-06-30 11:08 被阅读317次

    使用Volley获取和设置cookie

    最近发现有两个现象:
    • 1 公司的一个接口,在ios上请求成功,Android这边超时。
    • 2 公司的一个接口,在ios请求后台显示请求一次,Android后台显示请求三次,但是查看log日志,自己手动调用mRequestQueue.add(request)以及mRequestQueue.start()的次数始终为1,最后百度了一下是volley的一个bug。
    解决方案
    方案一:设置
    Request<String> req = new StringRequest(Request.Method.POST, url, adapter, adapter) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            return RequestMap;
        }
    };
    req.setRetryPolicy(new DefaultRetryPolicy(10000,//默认超时时间,默认2500
            DefaultRetryPolicy.DEFAULT_MAX_RETRIES,//默认最大尝试次数
            DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
    MyVolley.getRequestQueue().add(req);
    

    其中DEFAULT_BACKOFF_MULT​对于请求失败之后的请求,并不会隔相同的时间去请求Server,不会以线性的时间增长去请求,而是一个曲线增长,一次比一次长,如果backoff因子是2,当前超时为3,即下次再请求隔6S​

    方案二:在HurlStack中的openConnection方法中,在相应段落增加
        connection.setChunkedStreamingMode(0)
    
    另外:关于取消请求

    Volley提供了强大的API取消未处理或正在处理的请求。取消请求最简单的方法是调用请求队列cancelAll(tag)的方法,前提是你在添加请求时设置了标记。这样就能使标签标记的请求挂起。
    给请求设置标签:

    request.setTag("My Tag");
    

    使用ApplicationController添加使用了标签的请求到队列中:

    ApplicationController.getInstance().addToRequestQueue(request, "My Tag");
    

    取消所有指定标记的请求:

    mRequestQueue.cancelAll("My Tag");
    

    使用Volley获取和设置cookie

    相关文章

      网友评论

          本文标题:volley超时和重复请求问题

          本文链接:https://www.haomeiwen.com/subject/dgebcxtx.html