如果 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();
         }
}