Для обработки Android Volley Timeout вам необходимо использовать RetryPolicy
RetryPolicy
- Volley предоставляет простой способ реализовать RetryPolicy для ваших запросов.
- Volley устанавливает значение Socket & ConnectionTImeout по умолчанию равным 5 секундам для всех запросов.
RetryPolicy
это интерфейс, в котором вам нужно реализовать свою логику того, как вы хотите повторить определенный запрос, когда происходит тайм-аут.
Он имеет дело с этими тремя параметрами
- Тайм-аут - Указывает время ожидания сокета в миллисах раз за каждую попытку повторной попытки.
- Количество попыток - количество попыток повторной попытки.
- Back Off Multiplier - множитель, который используется для определения экспоненциального времени, установленного для сокета, при каждой попытке повтора.
Например Если RetryPolicy создан с этими значениями
Тайм-аут - 3000 мс, количество попыток повторной попытки - 2, множитель отключения - 2,0
Повторите попытку 1:
- время = время + (время * Back Off Multiplier);
- время = 3000 + 6000 = 9000 мс
- Время ожидания сокета = время;
- Запрос отправлен с Тайм-аутом сокета 9 секунд
Повторите попытку 2:
- время = время + (время * Back Off Multiplier);
- время = 9000 + 18000 = 27000 мс
- Время ожидания сокета = время;
- Запрос отправлен с тайм-аутом сокета 27 секунд
Таким образом, в конце Retry Attempt 2, если все еще случается тайм-аут сокета, Volley выдавал бы TimeoutError
обработчик ошибок вашего интерфейса.
//Set a retry policy in case of SocketTimeout & ConnectionTimeout Exceptions.
//Volley does retry for you if you have specified the policy.
jsonObjRequest.setRetryPolicy(new DefaultRetryPolicy(5000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));