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));
我在 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));