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);
}
Ответы
Ответ 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 {
}
});
Надеюсь, что это решит проблему.