web-dev-qa-db-ja.com

Androidボレーがデータを2回送信

アプリケーションで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);
}
40

ボレーがデータを2回送信する バグを回避するためにconnection.setChunkedStreamingMode(0);を使用する必要はありません。現在のリクエストに再試行ポリシーを設定する必要があります:

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

ボレー解析でnew Response.ErrorListener()メソッドの完了後に以下のコードを使用します。あなたの役に立つことを願っています。同じ問題に直面し、同じコードで解決しました。

コード:

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

これは動作します

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

 request.setRetryPolicy(mRetryPolicy);
3
Shubham Goel

これを試してみてください間違いなく動作します。

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

この問題を解決して、このコードを使用します。 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 {

        }
    });

これで問題が解決することを願っています。

0
Mahmudur Rahman