Android凌空两次发送数据

时间:2015-01-10 04:57:59

标签: android android-volley

我在我的应用程序中使用 Volley 网络库。

问题是,当网络连接速度很慢时,它会多次发送数据。

在我谷歌这个问题之后,我能找到关于这个问题的所有内容都在下面:

connection.setChunkedStreamingMode(0);

但是我无法编辑我的排球库Hurlkstack课程。

它说:

此类文件的jar属于容器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);
}

5 个答案:

答案 0 :(得分:77)

无需使用connection.setChunkedStreamingMode(0);来避免volley sending data twice错误。您需要为当前请求设置重试策略:

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

答案 1 :(得分:7)

在您的排球解析中完成新的Response.ErrorListener()方法后,请使用以下代码。希望它对你有用。我遇到了同样的问题并用相同的代码解决了它。

代码:

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

答案 2 :(得分:3)

这将有效

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

 request.setRetryPolicy(mRetryPolicy);

答案 3 :(得分:3)

试试这肯定会有用。

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

答案 4 :(得分:0)

我解决了这个问题以使用此代码。将 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 {

        }
    });

希望这能解决问题。