如果在特定时间没有响应,我想取消截击请求
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秒钟内没有响应,我想举杯并取消我的请求 我怎样才能做到这一点? 预先谢谢你
答案 0 :(得分:2)
您可以为请求设置超时。
在特定的超时后,您的请求将失败,您可以在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();
}
}