Android Volley双柱时有缓慢的要求

我在慢速networking上遇到了Volley POST请求问题。 每次我在LogCat中看到BasicNetwork.logSlowRequests时,我的POST请求会被执行两次或更多次,从而导致多个(2个或更多)张贴1个请求。 我已经将重试策略设置为0,但它没有帮助。

这是我的LogCat

03-16 01:31:35.674 D / Volley(5984):[19807] BasicNetwork.logSlowRequests:请求的HTTP响应= [[] http:// [myserver] / api / places 0xfa7d0c33 NORMAL 1> [lifetime = 3824 ],[size = 313],[rc = 200],[retryCount = 0] 03-16 01:31:35.704:D / Volley(5984):[1] Request.finish:3853 ms:[] http: / [myserver] / api /放置0xfa7d0c33 NORMAL 1

这是我的代码

  JSONObject body = new JSONObject(); try { body.put(PROTO_BODY_AUTHORIZATION, Sessions.getActiveSession().getToken()); } catch (JSONException e) { e.printStackTrace(); } JsonObjectRequest request = new JsonObjectRequest( Request.Method.POST, context.getResources().getString(R.string.server_address) + "/places", body, callback, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(context, error.getMessage(), Toast.LENGTH_LONG).show(); } } ); request.setRetryPolicy( new DefaultRetryPolicy( DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); getRequestQueue().add(request); 

请帮助,我拼命find解决这个问题的方法。

将以下值添加到您的请求对象

 request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

这里: request是JsonObjectRequest的对象,并根据DefaultRetryPolicy类中的DEFAULT TIME-OUT VALUE在volley中更改multipilcator的值

您也可以将第一个参数设置为0,如下所示

 request.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

我发现解决scheme的双后,我只是将超时设置为0。

只要将RetryPolicy中的超时设置为0就太less了。 在检查源代码后,必须实际设置最大重试次数<0,因为它正在检查当前<=最大…

我固定双重张贴与设置政策以下

 new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

希望能帮助到你!

我能够通过两种方式解决这个问题。

首先是改变了RetryPolicy 。 只需将超时值设置为默认超时的两倍。 工作很好。 您也可以尝试其他值。

 request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

另一种方法是通过设置connection.setChunkedStreamingMode(0);openConnection方法HurlStack类中。

我正在创build我的RequestQueue像这样requestQueue = Volley.newRequestQueue(context, new HurlStack());

希望能帮助到你 :)

我find了多postbug的解决scheme。

更改RetryPolicy。 我设置超时值为50000毫秒,工作正常像这样:

  request.setRetryPolicy( new DefaultRetryPolicy( 500000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT ) ); 

我在这里问了一个类似的问题:

当重试策略设置为0时,Android Volley向服务器发出2个请求

我设法解决这个问题,通过在Android内设置keep-alive属性为false,例如:

 System.setProperty("http.keepAlive", "false") 

我在导入requestqueue的类中添加了这一行代码并发出请求。

此外,请检查您的服务器是否有保持活动标题。

这篇文章帮助到解决scheme。

您必须将RetryPolicy设置为0重试,并确保超时大于服务器超时。

 setRetryPolicy(new DefaultRetryPolicy("bigger than server timeout", 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

请增加setRetryPolicy时间。

 request.setRetryPolicy(new DefaultRetryPolicy( 30000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(this).add(equest); 

这对我有用。

 public class MyRetryPolicyWithoutRetry implements RetryPolicy { @override public int getCurrentTimeout() { return CONNECTION_TIME_OUT; /200000/ } @Override public int getCurrentRetryCount() { return 0; } @Override public void retry(VolleyError error) throws VolleyError { throw(error); } } 

使用:

 request.setRetryPolicy(new MyRetryPolicyWithoutRetry()); 

我设法通过像这样configurationHttpURLConnection来解决这个问题:

 connection.setChunkedStreamingMode(0); 

我在Volley邮件列表( https://groups.google.com/forum/#!topic/volley-users/8PE9dBbD6iA )中开始讨论这个问题。

只是maxNumRetries = 0没有工作。 set TIMEOUT_MS 20000

 request.setRetryPolicy(new DefaultRetryPolicy(20000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 
 request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

这对我有效。

你可以用这个来解决这个问题。

 StringRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 2, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

我得到双重请求停止的唯一方法是将重试策略重试设置为-1

 request.setRetryPolicy(new DefaultRetryPolicy(0, -1, 0)); 

我认为这是因为如果retryCount为0且hasAttemptRemaining()方法中的最大重试次数也为0,则剩余尝试次数的DefaultRetryPolicy逻辑返回true。

 protected boolean hasAttemptRemaining() { return this.mCurrentRetryCount <= this.mMaxNumRetries; } 

试了很多东西,但最终没有什么帮助,最后我想出了以下变化的组合

sr.setRetryPolicy(new DefaultRetryPolicy(0,-1,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

在你的应用程序类的投掷连接添加这个

httpsURLConnection.setChunkedStreamingMode(0);

这顺利地停止了Volley在服务器上的多重请求