Я использую новую платформу Volley для Android, чтобы сделать запрос к моему серверу. Но это время ожидания до получения ответа, хотя он и отвечает.
Я попытался добавить этот код:
HttpConnectionParams.setConnectionTimeout(httpParams, 5000);
HttpConnectionParams.setSoTimeout(httpParams, timeoutMs);
в HttpClientStack
структуре Volley к другому целому числу (50000), но время ожидания истекает до 50 секунд.
Есть ли способ изменить время ожидания на длинное значение?
android
timeout
android-volley
Cissmayazz
источник
источник
HttpClient
класса.Ответы:
Смотрите
Request.setRetryPolicy()
и конструктор дляDefaultRetryPolicy
, например,источник
Для обработки Android Volley Timeout вам необходимо использовать
RetryPolicy
RetryPolicy
RetryPolicy
это интерфейс, в котором вам нужно реализовать свою логику того, как вы хотите повторить определенный запрос, когда происходит тайм-аут.Он имеет дело с этими тремя параметрами
Например Если RetryPolicy создан с этими значениями
Повторите попытку 1:
Повторите попытку 2:
Таким образом, в конце Retry Attempt 2, если все еще случается тайм-аут сокета, Volley выдавал бы
TimeoutError
обработчик ошибок вашего интерфейса.источник
RetryPolicy
самом деле делает реализация.new DefaultRetryPolicy(
и убедитесь , что никогда не использовать повторно вRetryPolicy
объект, а объект ссылается через весь процесс запроса и приращения повторов добавляют в течение того же значения объекта тайм - аут, что делает ваши будущие интервалы времени запроса расти бесконечноПросто чтобы внести свой вклад с моим подходом. Как уже ответили,
RetryPolicy
это путь. Но если вам нужна политика, отличная от политики по умолчанию для всех ваших запросов, вы можете установить ее в базовом классе запросов, поэтому вам не нужно устанавливать политику для всех экземпляров ваших запросов.Что-то вроде этого:
В моем случае у меня есть GsonRequest, который выходит из этого BaseRequest, поэтому я не рискую забыть установить политику для конкретного запроса, и вы все равно можете переопределить ее, если этого требует какой-то конкретный запрос.
источник
источник
Вы можете установить
MY_SOCKET_TIMEOUT_MS
как 100. Все, что вы хотите установить это в миллисекундах.DEFAULT_MAX_RETRIES
может быть 0 по умолчанию 1.источник
источник
Другой способ сделать это в пользовательском JsonObjectRequest:
Источник: Android Volley Пример
источник
Альтернативное решение, если все вышеперечисленные решения не работают для вас
По умолчанию Volley устанавливает одинаковое время ожидания для обоих
setConnectionTimeout()
иsetReadTimeout()
со значением изRetryPolicy
. В моем случаеVolley
выдает исключение тайм-аута для большого блока данных:Мое решение - создать класс, который расширяет
HttpStack
мою собственнуюsetReadTimeout()
политику. Затем используйте его при созданииRequestQueue
следующим образом:источник
Я закончил тем, что добавил метод
setCurrentTimeout(int timeout)
кRetryPolicy
и его реализация вDefaultRetryPolicy
.Затем я добавил
setCurrentTimeout(int timeout)
в класс Request и вызвал его.Это похоже на работу.
Извините за мою лень, кстати, и ура за открытый исходный код.
источник