• 解决: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);

  • 相关阅读:
    (译)TDD(测试驱动开发)的5个步骤
    HUD前装增速大幅下滑?市场格局分化/新玩家陆续入场
    ‘Could not find first log file name in binary log index file‘的解决办法
    中国首个进入谷歌编程之夏(GSoC)的开源项目: Casbin, 2022 年预选生招募!
    神经元网络
    机器学习笔记 - WGAN生成对抗网络概述和示例
    vsftp新建用户及目录时遇到的坑
    Test-Time Training
    保证金监控中心查询期货开户密码
    Map接口
  • 原文地址:https://blog.csdn.net/haha223545/article/details/136198558