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在服务器上的多重请求