Ich arbeite an einem Android-Projekt, das Volley für asynchrone Anfragen und Imagecaching verwendet. Irgendwie trifft eine Anfrage den Server zweimal, auch wenn die Wiederholungsrichtlinie auf 0 gesetzt ist. Ich habe versucht, die Werte vom DefaultRetryPolicy-Objekt ohne Erfolg zu überschreiben. Hier ist ein Beispielcode:Android Volley macht zwei Anfragen an den Server, wenn die Wiederholungsrichtlinie auf 0 gesetzt ist
Die Anfrage:
@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;
}
}));
}
});
}
Retry-Politik:
private Request<?> setDefaultRetryPolicy(Request<?> request) {
request.setRetryPolicy(new DefaultRetryPolicy(30000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
return request;
}
Grundsätzlich möchte ich mit 0 Wiederholungen das Timeout auf 30 Sekunden eingestellt werden.
Wenn ich die Anzahl der Wiederholungen erhöht, funktioniert es wie erwartet, aber wenn ich es auf 0 setze, macht es 2 Anfragen.
Benötigen Sie Hilfe hier.
bearbeiten
konnte ich mein Problem lösen, indem sie die Keep-Alive-Eigenschaft auf false innerhalb von Android-Einstellung. zB:
System.setProperty("http.keepAlive", "false");
Ich habe diese Codezeile innerhalb der Klasse, wo ich Request importieren und die Anfragen stellen.
Überprüfen Sie auch, ob Ihr Server den Keep-Alive-Header hat.
Diese post half, die Lösung zu bekommen.
Sie Ihre bearbeiten als separate Antwort schreiben sollte, da sie die Lösung auf diese Frage ist Sie suchen (Selbst Antworten sind erlaubt). –
Ich habe das gleiche Problem. Ich habe die Zeitüberschreitung auf 60 Sekunden erhöht, da Wiederholungen zweimal ausgeführt werden, obwohl ich DefaultRetryPolicy (60000, 0, 0) habe. Warum? – portfoliobuilder
Dies ist sicherlich keine Antwort auf Ihr Problem, aber ein Nebeneffekt, dass das Problem nicht auftritt. Es gibt 2 Dinge nicht klar: 1) setDefaultRetryPolicy Sie eingefügt wird wo und wann als Volley's ImageRequest setzt seine eigene RetryPolicy 2) das ist der HTTP-Stack, den Sie verwenden, weil HURL okhttp für einige Zeit verwendet und es hat eine erneute Wiederholung Anfragen Das Beantworten dieser kann dazu führen, dass Sie wirklich herausfinden, warum das passiert. – djodjo