Ich verwende Volley Network Library in meiner Anwendung.
Das Problem ist, dass Daten mehr als einmal gesendet werden, wenn die Netzwerkverbindung langsam ist.
Und nachdem ich dieses Problem bei Google gefunden habe, ist alles, was ich zu diesem Problem finden kann, unter diesem Punkt:
connection.setChunkedStreamingMode(0);
Aber ich kann meine Hurlkstack-Klassen für meine Volley-Bibliothek nicht bearbeiten.
Es sagt:
Die JAR-Datei dieser Klassendatei gehört zu den Android Private-Bibliotheken, in denen die Quellanhänge der Einträge nicht geändert werden können.
Was soll ich tun, kann mir jemand helfen
ich habe den folgenden Code, wo sollte ich ändern .
private void makeJsonObjectRequest() {
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
"http://example.com/***.php", obj, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
response.getString("success");
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
AppController.getInstance().addToRequestQueue(jsonObjReq);
}
Keine Notwendigkeit, connection.setChunkedStreamingMode(0);
zu verwenden, um zu vermeiden, dass volley zweimal Daten sendet. Sie müssen die Wiederholungsrichtlinie für die aktuelle Anfrage festlegen:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Verwenden Sie den folgenden Code nach Abschluss der Methode new Response.ErrorListener () bei Ihrer Volleyanalyse. Hoffe es ist nützlich für dich. Ich hatte das gleiche Problem und löste es mit demselben Code.
Code:
jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
Das wird funktionieren
RetryPolicy mRetryPolicy = new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
request.setRetryPolicy(mRetryPolicy);
Versuchen Sie es auf jeden Fall.
public <T> void addToRequestQueue(StringRequest req, String tag) {
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
req.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
getRequestQueue().add(req);
}
Ich löse dieses Problem, um diesen Code zu verwenden. Legen Sie getCurrentRetryCount () auf return 0 fest und verwenden Sie HurlStack für BaseHttpStack.
RequestQueue requestQueue = Volley.newRequestQueue(NavigationActivity.this, new HurlStack());
requestQueue.add(stringRequest).setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 5000;
}
@Override
public int getCurrentRetryCount() {
return 0; //retry turn off
}
@Override
public void retry(VolleyError error) throws VolleyError {
}
});
Hoffe das löst das Problem.