Intereting Posts
Преобразование простой прошивки Java в дату Java Ellipsize не работает для textView внутри пользовательского listView Поскольку зефир обновляет обнаружение Bluetooth с помощью BluetoothAdapter.getDefaultAdapter (). StartDiscovery (); сломан «Сообщение не найдено» предупреждений в strings.xml Как я могу реализовать простой AsyncTaskLoader? Ошибка установки: INSTALL_FAILED_MISSING_SHARED_LIBRARY Зависимости -> Не удалось создать плагин типа «AppPlugin» Как использовать акселерометр Android? Android: HorizontalScrollView внутри ScrollView Точность акселерометра Android (инерциальная навигация) Активность Android по блокировке блокировки по умолчанию Android: как транслировать намерение из собственного кода? Android добавляет границу для редактирования текста программно Android «Привет, MapView» Учебник – Карта плитки не загружаются Я получаю «Ошибка: не найден ресурс, который соответствует указанному имени (при значении со значением @ integer / google_play_services_version)»

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));