Sto lavorando a un progetto Android che utilizza Volley per richieste asincrone e imagecaching. In qualche modo una richiesta sta colpendo il server due volte anche quando ho impostato il criterio retry su 0. Ho provato a sovrascrivere i valori dall'oggetto DefaultRetryPolicy senza successo. Ecco alcuni esempi di codice:Android Volley invia 2 richieste al server quando il criterio di retry è impostato su 0
La richiesta:
@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;
}
}));
}
});
}
politica Riprova:
private Request<?> setDefaultRetryPolicy(Request<?> request) {
request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
return request;
}
Fondamentalmente, voglio impostare il timeout a 30 secondi con 0 tentativi.
Se aumento il numero di tentativi, funziona come previsto, ma se lo imposto su 0 esegue 2 richieste.
Ho bisogno di aiuto qui.
Modifica
sono riuscito a risolvere il mio problema impostando la proprietà keep-alive su false Android all'interno. es .:
System.setProperty("http.keepAlive", "false");
Ho aggiunto questa riga di codice all'interno della classe in cui importa la richiesta e faccio le richieste.
Inoltre, controllare se il server ha l'intestazione keep-alive.
Questo post ha aiutato ad arrivare alla soluzione.
Si consiglia di inviare la tua modifica come una risposta separata, dal momento che è la soluzione a questo problema che cercavate (auto-risposte sono ammessi). –
Sto riscontrando lo stesso problema. Ho aumentato il timeout a 60 secondi, perché i tentativi continuano a funzionare due volte anche se ho DefaultRetryPolicy (60000, 0, 0). Perché? – portfoliobuilder
questo non è sicuramente una risposta al tuo problema, ma un effetto collaterale che fa sì che il problema non si verifichi. ci sono 2 cose non chiari: 1) setDefaultRetryPolicy che hai incollato viene chiamato dove e quando ImageRequest di Volley imposta il proprio RetryPolicy 2) che è lo stack http che usi perché HURL usa okhttp per qualche tempo e ha un nuovo tentativo silenzioso richieste Rispondere a quelle potrebbe portare a scoprire davvero perché questo sta accadendo – djodjo