在第一次打电话后如何进行截击请求不应该以任何方式重试?

时间:2015-06-27 13:19:34

标签: android android-volley

我正在请求使用凌空调用服务器,但有时当网络中存在延迟时,它再次向服务器发出请求。

但是根据我的要求,它应该只调用服务器一次,而不管服务器的响应如何。

2 个答案:

答案 0 :(得分:1)

public RetryPolicy myRetryPolicy(){
  return new RetryPolicy() {
      @Override
      public int getCurrentTimeout() {
          return 10000;
      }

      @Override
      public int getCurrentRetryCount() {
          return 0;
      }

      @Override
      public void retry(VolleyError error) throws VolleyError {
        Log.d(TAG, "Volley Error " + error.toString());
          throw new VolleyError("Do Not Retry");
      }
  };
}

如果您设置了自定义RetryPolicy,请在重试方法中抛出VolleyError。排球从未重演。

postRequest.setRetryPolicy(myRetryPolicy());

<强> logcat的

  

11-05 13:00:36.078 6014-6314 / ******:Volley Error com.android.volley.TimeoutError   11-05 13:00:36.079 6014-6014 / *******:Volley Error com.android.volley.VolleyError:不要重试

答案 1 :(得分:0)

排球默认重试政策是:

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

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

您可以在DefaultRetryPolicy.java

中找到它

因此您可以看到默认情况下凌空发出1次重试请求。

尝试使用较小的TIMEOUT(如果您不想等待2500毫秒),或者大于2500毫秒以获得答案),但请保留其他值,例如:

// Wait 20 seconds and don't retry more than once
myRequest.setRetryPolicy(new DefaultRetryPolicy(
       (int) TimeUnit.SECONDS.toMillis(20),
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));