【发布时间】:2014-04-21 02:55:57
【问题描述】:
我在慢速网络上遇到 Volley POST 请求问题。每次我在 LogCat 中看到 BasicNetwork.logSlowRequests 时,我的 POST 请求都会执行两次或更多次,从而导致 1 个请求的多个(2 个或更多)张贴。我已经将重试策略设置为 0,但它没有帮助。
这是我的 LogCat
03-16 01:31:35.674: D/Volley(5984): [19807] BasicNetwork.logSlowRequests:请求的 HTTP 响应=http://[myserver]/api/places 0xfa7d0c33 正常 1> [寿命=3824], [大小=313],[rc=200],[retryCount=0] 03-16 01:31:35.704: D/Volley(5984): [1] Request.finish: 3853 ms: [] http://[myserver]/api/places 0xfa7d0c33 正常 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);
请帮忙,我正在拼命寻找这个问题的解决方案。
【问题讨论】:
-
您的网络请求超时秒数是否与重试策略超时秒数相同?
-
网络请求超时量在哪里获取?如果我从 LogCat 中看到,请求生命周期是 3825 毫秒。重试策略超时量为 2500ms (DefaultRetryPolicy.DEFAULT_TIMEOUT_MS)
-
如果我查看
Volley的源代码,我看到大多数超时设置为 5000 毫秒。我猜你的帖子是双重的,因为你的重试发生在请求超时之前,实际上发送了两次。