解决:Glide 在回调中再次加载图片报错

一、问题说明

Glide 加载图片时监听了回调,并在失败时再次加载其它图片后报错。

代码:

Glide.with(mContext).load(imgTeacher)
        .listener(new RequestListener<Drawable>() {
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                return false;
            }
            @Override
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                try {
                    Glide.with(mContext).load(imgTeacher).into(holder.iv2);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return false;
            }
        })
        .into(holder.iv2);

异常日志:

java.lang.IllegalStateException: You can't start or clear loads in RequestListener or Target callbacks. 
   If you're trying to start a fallback request when a load fails, use RequestBuilder#error(RequestBuilder). Otherwise consider posting your into() or clear() calls to the main thread using a Handler instead.
        at com.bumptech.glide.request.SingleRequest.assertNotCallingCallbacks(SingleRequest.java:305)
        at com.bumptech.glide.request.SingleRequest.begin(SingleRequest.java:217)
        at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:806)
        at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:780)
        at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:771)
        at com.xueersi.lib.imageloader.GlideLoader.into(GlideLoader.java:321)
        at com.xueersi.lib.imageloader.GlideLoader.request(GlideLoader.java:250)
        at com.xueersi.lib.imageloader.SingleConfig.show(SingleConfig.java:270)
        at com.xueersi.lib.imageloader.SingleConfig.access$2700(SingleConfig.java:23)
        at com.xueersi.lib.imageloader.SingleConfig$ConfigBuilder.into(SingleConfig.java:347)

二、解决方案

hander.post 一下:

Glide.with(mContext).load("")
        .listener(new RequestListener<Drawable>() {
            @Override
            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                holder.iv1.post(() -> {
                    Glide.with(mContext).load(imgTeacher).into(holder.iv2);
                });
                return false;
            }
            @Override
            public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                return false;
            }
        })
        .into(holder.iv2);

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 16:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 16:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 16:52:02       87 阅读
  4. Python语言-面向对象

    2024-03-10 16:52:02       96 阅读

热门阅读

  1. sql返回数据怎么添加索引

    2024-03-10 16:52:02       40 阅读
  2. 速盾网络:cdn加速技术和云计算的区别

    2024-03-10 16:52:02       43 阅读
  3. adb shell pm 查询设备应用

    2024-03-10 16:52:02       46 阅读
  4. springcloud学习过程错误

    2024-03-10 16:52:02       51 阅读
  5. spring三种配置方式总结

    2024-03-10 16:52:02       40 阅读
  6. 学习笔记 反悔贪心

    2024-03-10 16:52:02       33 阅读
  7. Kafka|处理 Kafka 消息重复的有效措施

    2024-03-10 16:52:02       45 阅读