web-dev-qa-db-fra.com

Android volley envoie deux fois les données

J'utilise Volley Network Library dans mon application.

Le problème est qu'il envoie des données plusieurs fois lorsque la connexion réseau est lente.

Et après avoir consulté ce numéro sur Google, tout ce que je peux trouver sur ce problème se trouve au-dessous de point:

connection.setChunkedStreamingMode(0);

Mais je ne suis pas en mesure d'éditer mes classes de Hurlkstack dans la bibliothèque de volley-ball.

Ça dit: 

Le fichier jar de ce fichier de classe appartient aux bibliothèques privées Android du conteneur qui ne permettent pas la modification des pièces jointes sources sur ses entrées.

Que dois-je faire quelqu'un peut-il m'aider?

j'ai le code suivant où devrais-je modifier .

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
Shashikala Chavan

Pas besoin d'utiliser connection.setChunkedStreamingMode(0); pour éviter envoyer des données deux fois bug. vous devez définir la stratégie de nouvelle tentative pour la demande en cours:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
                       0,
                       DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
73
ρяσѕρєя K

Utilisez le code ci-dessous après l’achèvement de la nouvelle méthode Response.ErrorListener () dans votre analyse de volée. J'espère que cela vous sera utile. J'ai fait face au même problème et l'ai résolu avec le même code.

Code: 

jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
                30000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
7
Sneha Patel

Ça va marcher

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

 request.setRetryPolicy(mRetryPolicy);
3
Shubham Goel

Essayez cela va certainement fonctionner.

 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

Je résous ce problème pour utiliser ce code. Définissez getCurrentRetryCount () à renvoie 0 et utilisez HurlStack pour 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 {

        }
    });

J'espère que cela résoudra le problème. 

0
Mahmudur Rahman