java - Android Volley如何捕获多次发送中的超时错误

标签 java android android-volley

当互联网连接恢复时,我使用 Volley 发送 GPS 位置。例如我有 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);

最佳答案

试试这个,在这里你可以检查错误是否是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   
                }

            }
        });

关于java - Android Volley如何捕获多次发送中的超时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49194011/

相关文章:

Java 空指针检查以加快代码执行速度

android - 防止反编译android apk

android - 网络响应为空的 Volley 服务器错误

java - spring boot如何从自定义yml加载属性

java - Random.nextgaussian() 可以从具有不同均值和标准差的分布中采样值吗?

android - ViewPager : swipe not working 内的 ScrollView

android - Skobbler/Skmaps 导航箭头定位

Android Volley 似乎无法连接到 Flask 本地主机地址以获取 Flask 返回字符串的 GET 方法?

php - 使用 Volley 插入后无法自动递增

java - Android UI 线程停止从其他线程更新