Intereting Posts
Производительность Джексона JSON Parser Скрыть предварительный просмотр клавиатуры клавиатуры Android Что такое BIOS в Android Как запустить одиночную (общую) службу в библиотеке для нескольких приложений? Преобразовать mm-dd-yyyy в yyyy-mm-dd Как перейти от взломанного APK к java-коду? Инструмент с одним кликом взломал мое приложение Android-тамильский шрифт между английским словом Android: вопрос о растровых изображениях, использовании памяти и масштабировании PlaceAutocomplete получает неизвестный код статуса: 9000 Произошла утечка памяти (утечка активности), вызванная CookieSyncManager? SupportMapFragment – нельзя отбрасывать из фрагмента в MapFragment Почему Android-загрузчик классов допускает отражающий доступ к публичному полю пакета-частного класса из другого пакета? Android Studio – ошибка нелегального символа 8204 Эмулятор Genymotion не запускается. Остается навсегда на черном экране "android" Как читать выбранное приложение для определения местоположения в Android M – API 23

Android Volley делает 2 запроса на сервер, когда для политики повторных попыток установлено значение 0

Я работаю над проектом Android, который использует Volley для асинхронных запросов и обработки изображений. Так или иначе запрос дважды ударяет по серверу, даже когда у меня установлена ​​политика повтора на 0. Я попытался переопределить значения из объекта DefaultRetryPolicy без успеха. Вот пример кода:

Запрос:

@Override public void gravarVendaMobile(final Usuario usuarioAutenticado, final AsyncCallback<String> callback) { obterParametrosDeInicializacao().done(new DoneCallback<ParametrosDeInicializacao>() { @Override public void onDone(final ParametrosDeInicializacao param) { requestQueue.add(setDefaultRetryPolicy(new StringRequest( Method.POST, urlPara(GRAVAR_VENDA_MOBILE, usuarioAutenticado.getFilial(), usuarioAutenticado.getCodigo()), listener(callback), //errorListener(R.string.could_not_load_produtos, callback) new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { callback.onError(new MessageCodeException(error.networkResponse.statusCode, error)); } } ) { @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = new HashMap<String, String>(); headers.put("Encoding", "UTF-8"); headers.put("Accept", "application/json"); headers.put("Content-type", "application/json; charset=UTF-8"); return headers; } })); } }); } 

Политика повтора:

 private Request<?> setDefaultRetryPolicy(Request<?> request) { request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); return request; } 

В принципе, я хочу установить тайм-аут на 30 секунд с помощью 0 попыток.

Если я увеличиваю количество попыток, он работает так, как ожидалось, но если я установил его в 0, он сделает 2 запроса.

Нужна помощь здесь.

редактировать

Мне удалось решить мою проблему, установив для свойства keep-alive значение false внутри android. например:

 System.setProperty("http.keepAlive", "false"); 

Я добавил эту строку кода внутри класса, где я импортирую requestqueue и делаю запросы.

Кроме того, проверьте, есть ли у сервера заголовок keep-alive.

Этот пост помог решить проблему.

Solutions Collecting From Web of "Android Volley делает 2 запроса на сервер, когда для политики повторных попыток установлено значение 0"

Я использую это, чтобы установить политику no-repeat:

  myRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

Класс hasAttemptRemaining () DefaultRetryPolicy.class выглядит следующим образом:

 protected boolean hasAttemptRemaining() { return this.mCurrentRetryCount <= this.mMaxNumRetries; } 

Из того, что я вижу, установка maxNumRetries на 0 все равно сделает это возвратом true, если он еще не выполнил повторную попытку.

Я исправил это с помощью

 request.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0); 

Просто установите тайм-аут на 20 секунд или более, как вы хотите, и повторите попытку до 0

 req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));