如果 10 秒内没有响应,如何取消 volley 请求
how to cancel volley request if there is no response in 10 seconds
如果在特定时间内没有响应,我想取消截击请求
StringRequest stringRequest = new StringRequest(Request.Method.POST, test_check_url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("resultarray");
JSONObject jsonObject1 = jsonArray.getJSONObject(0);
Calendar calendar = Calendar.getInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("test_id","");
map.put("chap_id","");]
map.put("type","check_test");
return map;
}
};
stringRequest.setTag(TAG);
MySingleton.getInstance(getContext()).addToRequestQueue(stringRequest);
我试过这样做:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (MySingleton.getInstance(getContext()).getRequestQueue() != null) {
MySingleton.getInstance(getContext()).getRequestQueue().cancelAll(TAG);
Toast.makeText(getContext(), "Request failed"+TAG, Toast.LENGTH_SHORT).show();
}
}
}, 10000);
我想举杯祝酒,如果 10 秒内没有回应,我会取消我的请求
我怎样才能做到这一点?
提前谢谢你
您可以为您的请求设置超时。
在该特定超时后,您的请求将失败,您可以在 onErrorResponse(VolleyError error)
中捕获该异常,在这里您可以显示 Toast
这里就是你的例子
stringRequest.setRetryPolicy(new DefaultRetryPolicy(MY_TIMEOUT_MS,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
MySingleton.getInstance(getContext()).addToRequestQueue(stringRequest);
将 MY_TIMEOUT_MS
设置为 10000 毫秒,将 DEFAULT_MAX_RETRIES
设置为 0
现在 10 秒后请求将失败,在您的 ErrorResponse
中您可以像这样捕获它并显示 Toast
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
if (error instanceof TimeoutError || error instanceof NoConnectionError||error instanceof NetworkError) {
Toast.makeText(context,context.getString(R.string.error_network_timeout),Toast.LENGTH_LONG).show();
}
}
如果在特定时间内没有响应,我想取消截击请求
StringRequest stringRequest = new StringRequest(Request.Method.POST, test_check_url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
JSONArray jsonArray = jsonObject.getJSONArray("resultarray");
JSONObject jsonObject1 = jsonArray.getJSONObject(0);
Calendar calendar = Calendar.getInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map = new HashMap<>();
map.put("test_id","");
map.put("chap_id","");]
map.put("type","check_test");
return map;
}
};
stringRequest.setTag(TAG);
MySingleton.getInstance(getContext()).addToRequestQueue(stringRequest);
我试过这样做:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (MySingleton.getInstance(getContext()).getRequestQueue() != null) {
MySingleton.getInstance(getContext()).getRequestQueue().cancelAll(TAG);
Toast.makeText(getContext(), "Request failed"+TAG, Toast.LENGTH_SHORT).show();
}
}
}, 10000);
我想举杯祝酒,如果 10 秒内没有回应,我会取消我的请求 我怎样才能做到这一点? 提前谢谢你
您可以为您的请求设置超时。
在该特定超时后,您的请求将失败,您可以在 onErrorResponse(VolleyError error)
中捕获该异常,在这里您可以显示 Toast
这里就是你的例子
stringRequest.setRetryPolicy(new DefaultRetryPolicy(MY_TIMEOUT_MS,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
MySingleton.getInstance(getContext()).addToRequestQueue(stringRequest);
将 MY_TIMEOUT_MS
设置为 10000 毫秒,将 DEFAULT_MAX_RETRIES
设置为 0
现在 10 秒后请求将失败,在您的 ErrorResponse
中您可以像这样捕获它并显示 Toast
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
if (error instanceof TimeoutError || error instanceof NoConnectionError||error instanceof NetworkError) {
Toast.makeText(context,context.getString(R.string.error_network_timeout),Toast.LENGTH_LONG).show();
}
}