为了账号安全,请及时绑定邮箱和手机立即绑定

更改截击超时时间

更改截击超时时间

UYOU 2019-07-11 15:51:00
更改截击超时时间我使用Android的新volley框架向我的服务器发出请求。但是它在得到响应之前会超时,尽管它确实会响应。我尝试添加以下代码:HttpConnectionParams.setConnectionTimeout(httpParams, 5000); HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);在……里面HttpClientStack将volley框架转换为不同的整数(50000),但它仍然在50秒前超时。有没有办法将超时更改为长值?
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

看见Request.setRetryPolicy()的构造函数DefaultRetryPolicy,G.

JsonObjectRequest myRequest = new JsonObjectRequest(Method.GET,
        url, null,
        new Response.Listener<JSONObject>() {

            @Override
            public void onResponse(JSONObject response) {
                Log.d(TAG, response.toString());
            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
            }});myRequest.setRetryPolicy(new DefaultRetryPolicy(
        MY_SOCKET_TIMEOUT_MS, 
        DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


查看完整回答
反对 回复 2019-07-11
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

要处理Androidvolleytimeout,您需要使用RetryPolicy

返乡政策

  • volley为您的请求提供了一种简单的实现Retry策略的方法。
  • volley将所有请求的默认套接字&ConnectionTImeout设置为5秒。

RetryPolicy是一个接口,在该接口中,需要实现在超时发生时如何重试特定请求的逻辑。

它处理这三个参数。

  • 超时-在Millis中指定每次重试尝试中的套接字超时。
  • 重试次数-重试次数。
  • 后退乘法器-一个乘法器,用于确定每次重试的指数时间设置为套接字。

前男友。如果使用以下值创建Retry策略

超时-3000毫秒,数值重试尝试-2,后退乘法器-2.0

重试尝试1:

  • 时间=时间+(时间*后退乘数);
  • 时间=3000+6000=9000毫秒
  • 套接字超时=时间;
  • 发出请求,套接字超时时间为9秒。

重试尝试2:

  • 时间=时间+(时间*后退乘数);
  • 时间=9000+18000=27000毫秒
  • 套接字超时=时间;
  • 以27秒的套接字超时发送请求

所以在最后重试尝试2如果仍然发生套接字超时,则会发出一个TimeoutError在您的UI错误响应处理程序中。

//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions. 
//Volley does retry for you if you have specified the policy.jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000, 
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


查看完整回答
反对 回复 2019-07-11
?
狐的传说

TA贡献1804条经验 获得超3个赞

只是为了对我的方法有所贡献。如前所述,RetryPolicy是该走的路。但是,如果您需要的策略与所有请求的默认值不同,则可以在基类中设置它,因此不需要为请求的所有实例设置策略。

就像这样:

public class BaseRequest<T> extends Request<T> {

    public BaseRequest(int method, String url, Response.ErrorListener listener) {
        super(method, url, listener);
        setRetryPolicy(getMyOwnDefaultRetryPolicy());
    }}

在我的例子中,我有一个从这个BaseRequest扩展而来的GsonRequest,所以我不会忘记为一个特定的请求设置策略,如果某些特定的请求需要的话,您仍然可以重写它。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 403 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信