как отменить запрос залпа, если нет ответа в течение 10 секунд - PullRequest
0 голосов
/ 23 сентября 2018

Я хочу отменить запрос залпа, если в конкретное время нет ответа

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 голосов
/ 23 сентября 2018

Вы можете установить тайм-аут для своего запроса.

, после того как этот конкретный тайм-аут будет отклонен, и вы можете перехватить это исключение внутри вашего onErrorResponse(VolleyError error), и здесь вы можете отобразить Toast

inВаш случай здесь является примером

 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 выможно поймать вот так и показать тост

@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();
         }
}
...