当互联网连接恢复时,我使用volley发送gps positins。例如,我有100条记录要发送。有时互联网连接太慢或电话失去它们。超时设置为3秒,因此并非所有记录都在发送。
我的问题是,如何从retryPolicy中捕获错误超时? 我想知道何时必须重新开始发送。在我的代码下面:
stringRequest = new StringRequest(Request.Method.POST, syncDbDataDrive.SERVER_URL_POSITIONS,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
String Response = jsonObject.getString("response");
if (Response.equals("OK")) {
syncDbHelper.updateLocalPositions(ID, Country, syncDbDataDrive.SYNC_STATUS_OK, database);
rowAdd++;
if (rowAdd == countRow) {
database.close();
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("latitude", Latitude);
params.put("longitude", Longitude);
params.put("country", Country);
return params;
}
};
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
3000, // timeout in miliseconds
0, // number of times retry
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
syncVolleySilgleton.getInstance(context).addToRequestQue(stringRequest);
答案 0 :(得分:1)
试试这个,在这里你可以检查错误是否是TimeoutError,如果有超时错误,你可以回想起你的任务......
stringRequest.setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 50000;
}
@Override
public int getCurrentRetryCount() {
return 50000;
}
@Override
public void retry(VolleyError error) throws VolleyError {
if(error instanceof TimeoutError){
// your stuf
}
}
});