最近发现有两个现象:
- 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");