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


    一、问题说明

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

    代码:

    1. Glide.with(mContext).load(imgTeacher)
    2. .listener(new RequestListener() {
    3. @Override
    4. public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
    5. return false;
    6. }
    7. @Override
    8. public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
    9. try {
    10. Glide.with(mContext).load(imgTeacher).into(holder.iv2);
    11. } catch (Exception e) {
    12. e.printStackTrace();
    13. }
    14. return false;
    15. }
    16. })
    17. .into(holder.iv2);

    异常日志:

    1. java.lang.IllegalStateException: You can't start or clear loads in RequestListener or Target callbacks.
    2. 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.
    3. at com.bumptech.glide.request.SingleRequest.assertNotCallingCallbacks(SingleRequest.java:305)
    4. at com.bumptech.glide.request.SingleRequest.begin(SingleRequest.java:217)
    5. at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:806)
    6. at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:780)
    7. at com.bumptech.glide.RequestBuilder.into(RequestBuilder.java:771)
    8. at com.xueersi.lib.imageloader.GlideLoader.into(GlideLoader.java:321)
    9. at com.xueersi.lib.imageloader.GlideLoader.request(GlideLoader.java:250)
    10. at com.xueersi.lib.imageloader.SingleConfig.show(SingleConfig.java:270)
    11. at com.xueersi.lib.imageloader.SingleConfig.access$2700(SingleConfig.java:23)
    12. at com.xueersi.lib.imageloader.SingleConfig$ConfigBuilder.into(SingleConfig.java:347)

    二、解决方案

    hander.post 一下:

    1. Glide.with(mContext).load("")
    2. .listener(new RequestListener() {
    3. @Override
    4. public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
    5. holder.iv1.post(() -> {
    6. Glide.with(mContext).load(imgTeacher).into(holder.iv2);
    7. });
    8. return false;
    9. }
    10. @Override
    11. public boolean onResourceReady(Drawable resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
    12. return false;
    13. }
    14. })
    15. .into(holder.iv2);

  • 相关阅读:
    Windows 下 Git 拉 Gitlab 代码
    springboot(ssm 拍卖行系统 在线拍卖平台 Java(code&LW)
    Zigbee组网控制流程
    2022/08/26 day11:redis:删除策略
    springboot基于微信小程序的运动软件前端的设计与实现别用设计源码100932
    性能测试性能瓶颈问题分析调优案例
    策略模式、策略模式与工厂模式相结合
    SSM - Springboot - MyBatis-Plus 全栈体系(十六)
    Aspose.Words使用教程之如何重命名合并字段
    交换机端口汇聚详解
  • 原文地址:https://blog.csdn.net/haha223545/article/details/136198558