我正在使用此代码从网络加载图像。

由于错误FileNotFound,我同时发出多个请求,但文件实际上存在于服务器上。

因此,我想问一下,如果 Glide 失败,我该如何重试 Glide 请求?

 public static void LoadNetworkImage(final Context context, final ImageView imageView, final String imageUrl) {

        Glide.with(context).
                load(imageUrl).
                listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {

                      //if loading fails then again make request

                        LoadNetworkImage(context,imageView,imageUrl);
                        return true;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        return false;
                    }
                }).
                into(imageView);
    }

我研究了How to retry image loading ,if Glide fails?的讨论,但没有帮助。

错误日志

最佳答案

这是库Weak Handler

1.将此库添加到build.gradle文件中。

2.代码如下。

代码

 public static void LoadNetworkImage(final Context context, final ImageView imageView, final String imageUrl) {



        final WeakHandler mHandler = new WeakHandler();
        final Runnable runnable = new Runnable() {
            @Override
            public void run() {
                LoadNetworkImage(context, imageView,imageUrl);
            }
        };

        Glide.with(context).
                load(imageUrl).
                transition(DrawableTransitionOptions.withCrossFade()).
                listener(new RequestListener<Drawable>() {
                    @Override
                    public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {


                        mHandler.postDelayed(runnable,1);
                        return true;
                    }

                    @Override
                    public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                        return false;
                    }
                }).
                into(imageView);
    }

注意
如果图像加载失败,则此代码将在1 MiiliSecond次失败后发送请求。仅在您说资源存在的情况下,这才对您而言效果最佳。

警告
但是,如果资源不存在,那么这不是最佳解决方案。因为递归将无限进行。

10-08 07:50
查看更多