如果10秒钟内没有响应,如何取消齐发请求

时间:2018-09-23 09:31:41

标签: android android-volley

如果在特定时间没有响应,我想取消截击请求

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秒钟内没有响应,我想举杯并取消我的请求 我怎样才能做到这一点? 预先谢谢你

1 个答案:

答案 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();
         }
}