Android 凌空发送数据两次
Android volley sending data twice
我在我的应用程序中使用 Volley 网络库。
问题是当网络连接速度慢时它会多次发送数据。
在我 Google 这个问题之后,我能找到的关于这个问题的所有信息如下:
connection.setChunkedStreamingMode(0);
但我无法编辑我的 volley 库 Hurlkstack classes.
它说:
此 class 文件的 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);
}
不需要使用 connection.setChunkedStreamingMode(0);
来避免 volley sending data twice 错误。您需要为当前请求设置重试策略:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
在 volley 解析中完成 新 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);
}
我使用这段代码解决了这个问题。将 getCurrentRetryCount() 设置为 return 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 {
}
});
希望这能解决问题。
我在我的应用程序中使用 Volley 网络库。
问题是当网络连接速度慢时它会多次发送数据。
在我 Google 这个问题之后,我能找到的关于这个问题的所有信息如下:
connection.setChunkedStreamingMode(0);
但我无法编辑我的 volley 库 Hurlkstack classes.
它说:
此 class 文件的 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);
}
不需要使用 connection.setChunkedStreamingMode(0);
来避免 volley sending data twice 错误。您需要为当前请求设置重试策略:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(...);
jsonObjReq.setRetryPolicy(new DefaultRetryPolicy(
0,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
在 volley 解析中完成 新 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);
}
我使用这段代码解决了这个问题。将 getCurrentRetryCount() 设置为 return 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 {
}
});
希望这能解决问题。