アプリケーションでVolley Network Libraryを使用しています。
問題は、ネットワーク接続が遅いときにデータを複数回送信していることです。
そして、この問題をGoogleで調べた後、この問題について見つけることができるのはポイント以下です:
connection.setChunkedStreamingMode(0);
しかし、ボレーライブラリのHurlkstackクラスを編集することはできません。
それは言います:
このクラスファイルのjarはcontainer 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);
}
ボレーがデータを2回送信する バグを回避するためにconnection.setChunkedStreamingMode(0);
を使用する必要はありません。現在のリクエストに再試行ポリシーを設定する必要があります:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
ボレー解析でnew Response.ErrorListener()メソッドの完了後に以下のコードを使用します。あなたの役に立つことを願っています。同じ問題に直面し、同じコードで解決しました。
コード:
jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(
30000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
これは動作します
RetryPolicy mRetryPolicy = new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
request.setRetryPolicy(mRetryPolicy);
これを試してみてください間違いなく動作します。
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);
}
この問題を解決して、このコードを使用します。 getCurrentRetryCount()をreturnに設定し、BaseHttpStackにHurlStackを使用します。
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 {
}
});
これで問題が解決することを願っています。