Подтвердить что ты не робот

Android-залп, отправляющий данные дважды

Я использую Volley Сетевую библиотеку в своем приложении.

Проблема заключается в том, что она отправляет данные более одного раза, когда сетевое соединение работает медленно.

И после того, как я Google эту проблему, все, что я могу найти по этой проблеме, находится ниже точки:

connection.setChunkedStreamingMode(0);

Но я не могу редактировать свои классы уроков волейбола.

В нем говорится:

Ящик этого файла класса принадлежит частным библиотекам контейнеров android, которые не позволяют изменять исходные вложения в нем.

Что мне делать, может кто-нибудь мне помочь?

У меня есть следующий код, где я должен изменить .

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);
}
4b9b3361

Ответ 1

Не нужно использовать connection.setChunkedStreamingMode(0);, чтобы во избежание волейбол посылать данные дважды. вам нужно установить политику повтора для текущего запроса:

JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
                       0,
                       DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

Ответ 2

Используйте следующий код после завершения нового метода Response.ErrorListener() в вашем разборе волейбола. Надеюсь, это полезно для вас. Я столкнулся с той же проблемой и разрешил ее с тем же кодом.

Код:

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

Ответ 3

Это будет работать

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

 request.setRetryPolicy(mRetryPolicy);

Ответ 4

Попробуйте это, безусловно, будет работать.

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

Ответ 5

Я решаю эту проблему, чтобы использовать этот код. Установите getCurrentRetryCount() для возврата 0 и используйте HurlStack для 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 {

        }
    });

Надеюсь, что это решит проблему.