webentwicklung-frage-antwort-db.com.de

Android-Volley senden zweimal Daten

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

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

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

Das wird funktionieren

 RetryPolicy mRetryPolicy = new DefaultRetryPolicy(
 0,
 DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
 DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

 request.setRetryPolicy(mRetryPolicy);
3
Shubham Goel

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);
}
2
Hanisha

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. 

0
Mahmudur Rahman