Android截击发送数据两次

Android截击发送数据两次,android,android-volley,Android,Android Volley,我在应用程序中使用了截击网络库 问题在于,当网络连接缓慢时,它会多次发送数据。 在我搜索了这个问题后,我能找到的关于这个问题的信息如下: connection.setChunkedStreamingMode(0); 但是我不能编辑我的截击库Hurkstack类 它说: 这个类文件的jar属于容器android私有库,它不允许修改它条目上的源附件 我该怎么办?有人能帮我吗 我有以下代码,我应该在哪里修改 private void makeJsonObjectRequest(){ JsonObj

我在应用程序中使用了截击网络库

问题在于,当网络连接缓慢时,它会多次发送数据。

在我搜索了这个问题后,我能找到的关于这个问题的信息如下:

connection.setChunkedStreamingMode(0);
但是我不能编辑我的截击库Hurkstack类

它说:

这个类文件的jar属于容器android私有库,它不允许修改它条目上的源附件

我该怎么办?有人能帮我吗

我有以下代码,我应该在哪里修改

private void makeJsonObjectRequest(){
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Method.POST,
"http://example.com/***.php”,obj,新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
response.getString(“成功”);
}捕获(JSONException e){
e、 printStackTrace();
}
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
AppController.getInstance().addToRequestQueue(JSONOBJEQ);
}

无需使用
连接。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);
}
public void addToRequestQueue(StringRequest请求,字符串标记){
请求setTag(TextUtils.isEmpty(tag)?tag:tag;
请求setRetryPolicy(新的DefaultRetryPolicy(20*1000,0,DefaultRetryPolicy.DEFAULT\u BACKOFF\u MULT));
getRequestQueue().add(请求);
}

我通过使用此代码来解决此问题。将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 {

        }
    });

希望这能解决问题

看看这是否有助于你发布你的数据??因为我可以看到使用
JsonObjectRequest
检索数据的代码。您可以为
jsonObjReq.setRetryPolicy(新的DefaultRetryPolicy(0,DefaultRetryPolicy.DEFAULT\u MAX\u RETRIES,DefaultRetryPolicy.DEFAULT\u BACKOFF\u MULT))设置重试策略
@PiyushGupta如果我不满意,我已经得到了答案,我会发布更多信息,谢谢replying@ShashikalaChavan可以没问题。“DefaultRetryPolicy.DEFAULT\u MAX\u RETRIES=0”然后在我的end@ShashikalaChavan:在
AppController.getInstance()之前调用
setRetryPolicy
。addToRequestQueue(jsonObjReq)
Line嘿,我得到了你的答案,答案是正确的,谢谢你的帮助,我只想问一下,是否有任何方法可以避免在发布数据时丢失数据此解决方案是否会导致
java.lang.NegativeArraySizeException
?可能吗?这就是我在使用setRetryPolicy后遇到的问题(),如果我们将请求超时设置为零,那么当请求超时时,为了避免发送两次,请将maxNumRetries设置为0。(默认_MAX_RETRIES=1,因此它将重试一次并发送两次消息)
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 {

        }
    });