0

我正在构建一个 android 应用程序,其中一些数据从 android 设备发送到服务器,每 1 秒持续 30 秒。(总共 30 个对服务器的请求)。

for为此使用了一个循环:

for(i=0;i<30;i++){
//Some data computation
JsonObjectRequest req = new JsonObjectRequest(url, new JSONObject(params),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            VolleyLog.v("Response:%n %s", response.toString(4));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.e("Error: ", error.getMessage());
            }
        });
}

我的服务器端收到了 30 多个条目。JsonObjectRequest 是否在每次迭代中发送多个请求?

4

1 回答 1

1

Volley 默认向服务器发出多个请求(默认重试策略)。这些设置可以在 中找到DefaultRetryPolicy.java。所以根据这个默认策略,Volley 尝试等待响应 2500 毫秒,但是如果在这个时间跨度内没有收到响应,那么它会重试 DEFAULT_MAX_RETRIES 设置的数字,即 1。并且使用 DEFAULT_BACKOFF_MULT 变量确定每次重试尝试设置为套接字的指数时间。

/** 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 = 0;

/** The default backoff multiplier */
public static final float DEFAULT_BACKOFF_MULT = 1f;

现在,要停止多个请求,您可以使用请求对象的 setRetryPolicy() 方法为请求对象配置重试策略。

//req = Request
req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0,
      DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

参考:这里

于 2015-11-16T07:20:37.643 回答