Android Volley如何在多次发送时捕获超时错误

时间:2018-03-09 12:38:47

标签: java android android-volley

当互联网连接恢复时,我使用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);

1 个答案:

答案 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   
                }

            }
        });