android - Android开发使用Volley时setRetryPolicy()方法调用应该写在哪里

标签 android android-volley

这可能是一个简单的问题,但我在实际代码中对其进行了测试,无法判断 Volley 的 setRetryPolicy() 函数的行为是否正确。任何人请告诉我要写的这个声明的正确位置。我应该在 onErrorResponse() 函数中还是在将请求输入队列之前编写此方法调用?

这是我的位图图像代码。我想在请求超时后重试 3 次,每次重试 20 秒。请建议我编写重试策略的正确位置,我是否根据需要正确设置了重试策略?

ImageRequest ir = new ImageRequest(url, new Response.Listener<Bitmap>() {

            @Override
            public void onResponse(Bitmap response) {
                      iv.setImageBitmap(response);

            }
        }, 0, 0, null, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                ir.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 2, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

            }
        });

mRequestQueue.add(ir);

最佳答案

一旦您声明并初始化了 Request 对象,就添加重试策略。在将您的请求添加到 Volley 队列之前,可以在任何地方添加策略。

ImageRequest  ir = new ImageRequest(url, new Response.Listener() {

        @Override
        public void onResponse(Bitmap response) {
            iv.setImageBitmap(response);
        }
    }, 0, 0, null, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            //Handle errors related to Volley such as networking issues, etc
        }
});

ir.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 2, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
mRequestQueue.add(ir);

另请注意:onErrorResponse() 回调函数用于处理 Volley 产生的错误。此时,您的请求已经发送并出现了一些网络错误。否则,您的代码将无法到达此回调函数。因此,在此函数中添加重试策略是没有意义的。

关于android - Android开发使用Volley时setRetryPolicy()方法调用应该写在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23487556/

相关文章:

android - 如何让一个应用适合不同的手机

java - 删除 Activity 中的标题栏也会删除图像

android - 如何在 Canvas 中只绘制一部分圆弧

Android Volley POST JsonObject 并获取 JsonArray 或 JsonObject 或其他响应

android - Lollipop 进度条着色

java - 当我尝试通过我的应用程序注册时,我没有收到任何回复

android - 使用 Volley (Android) 向带有参数的 REST Api 发送 DELETE 请求?

android - 数据未进入回收站 View 项目

Android Volley : POST request - req. NodeJS REST API 内部为空

java - 如何修复错误包 android.support.v7 不存在?