Android: 由于连接速度慢,在执行过程中取消了 Volley 请求

Android: Cancel Volley request during execution due to slow connection

我在 Android 中使用 Volley 来发出请求,包括获取相对大量的数据。我想将计时器设置为 5 秒,如果在它之后没有返回请求 - 这可能意味着连接速度很慢,因此我想取消请求。到目前为止我做了什么:

Timer timer = new Timer();
VioozerVolleyRequestFactory mFactory = new VioozerVolleyRequestFactory(this);
RequestQueue mQueue = VioozerVolleySingleton.getInstance(this).getRequestQueue();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        mQueue.cancelAll("MY_TAG");
    }
}, 5000};
Request<String> request = mFactory.createRequest(RequestType, 
    new Listener<String>() {
        @Override
        public void onResponse(String response) {
           timer.cancel();
           //...
        }
    },
    new ErrorListener<String>() {
        @Override
        public void onErrorResponse(String response) {
          timer.cancel(); 
          //...
        }
    }, extra);
request.setTag("MY_TAG");
mQueue.add(request);

我的问题:好像请求没有被取消。请求已执行,因此内置方法 cancelALL(TAG) 与此处无关。我怎样才能达到我的要求?

谢谢,

默认情况下,Volley 请求超时设置为 2500 毫秒,每个请求重试 1 次。

您需要覆盖 Request 的 DefaultRetryPolicy。

例如:

等待 5000 毫秒并且不执行任何重试。

request.setRetryPolicy(new DefaultRetryPolicy(5000,0,1f));

参考:DefaultRetryPolicy.java