当前位置: 首页 > 知识库问答 >
问题:

如果Glide失败,如何重试映像加载?

谭梓
2023-03-14

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

我同时发出多个请求,因此出现错误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);
    }

我研究了这个讨论,如果Glide失败,如何重试图像加载?但这没有帮助。

错误日志

类com。邦普泰克。滑行负载发动机GlideException:加载资源失败原因1:java。木卫一。FileNotFoundException(无内容提供程序:http://10.0.2.2:5000/image/tmpfhpbjdsf.png)调用GlideException#LogRootCauss(字符串)以获取更详细的原因(1/1):类com。邦普泰克。滑行负载发动机GlideException:获取数据失败,类android。所容纳之物res.AssetFileDescriptor,本地,DataCacheKey{sourceKey=http://10.0.2.2:5000/image/tmpfhpbjdsf.png,signature=EmptySignature}有一个原因:java。木卫一。FileNotFoundException(无内容提供程序:http://10.0.2.2:5000/image/tmpfhpbjdsf.png)调用GlideException#LogRootCauss(字符串)获取更多详细原因(1/1):类java。木卫一。FileNotFoundException:无内容提供程序:http://10.0.2.2:5000/image/tmpfhpbjdsf.png07-30 20:51:35.127 18903-18903/com。实例穆罕默德·马杜斯曼。项目I/Glide:根本原因(1/1)java。木卫一。FileNotFoundException:无内容提供程序:http://10.0.2.2:5000/image/tmpfhpbjdsf.png在Android。所容纳之物内容解析程序。android上的openTypedAssetFileDescriptor(ContentResolver.java:1396)。所容纳之物内容解析程序。android上的openAssetFileDescriptor(ContentResolver.java:1247)。所容纳之物内容解析程序。com上的openAssetFileDescriptor(ContentResolver.java:1170)。邦普泰克。滑行负载数据资产文件描述符本地LURIFETCHER。com上的loadResource(AssetFileDescriptorLocalUriFetcher.java:22)。邦普泰克。滑行负载数据资产文件描述符本地LURIFETCHER。com上的loadResource(AssetFileDescriptorLocalUriFetcher.java:13)。邦普泰克。滑行负载数据LocalUriFetcher。com上的loadData(LocalUriFetcher.java:44)。邦普泰克。滑行负载发动机源生成器。com上的startNext(SourceGenerator.java:62)。邦普泰克。滑行负载发动机我的工作。com上的runGenerators(DecodeJob.java:299)。邦普泰克。滑行负载发动机我的工作。com上的runWrapped(DecodeJob.java:269)。邦普泰克。滑行负载发动机我的工作。在java上运行(DecodeJob.java:230)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1162)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:636)。朗。丝线。在com上运行(Thread.java:764)。邦普泰克。滑行负载发动机遗嘱执行人。GlideExecutor$DefaultThreadFactory$1。run(GlideExecutor.java:446)07-30 20:51:35.127 18903-18903/com。实例穆罕默德·马杜斯曼。项目D/MyMessage:再次加载07-30 20:51:37.842 1397-1397/?W/audio_hw_generic:没有向HAL提供足够的数据,预期位置为58480553,仅写入58327920 07-30 20:51:38.041 18903-18903/com。实例穆罕默德·马杜斯曼。带滑动的项目:加载失败http://10.0.2.2:5000/image/tmpqklezoyk.png尺寸为[368x268]的类别com。邦普泰克。滑行负载发动机GlideException:加载资源失败原因1:java。木卫一。FileNotFoundException(无内容提供程序:http://10.0.2.2:5000/image/tmpqklezoyk.png)调用GlideException#LogRootCauss(字符串)以获取更详细的原因(1/1):类com。邦普泰克。滑行负载发动机GlideException:获取数据失败,类android。所容纳之物res.AssetFileDescriptor,本地,DataCacheKey{sourceKey=http://10.0.2.2:5000/image/tmpqklezoyk.png,signature=EmptySignature}有一个原因:java。木卫一。FileNotFoundException(无内容提供程序:http://10.0.2.2:5000/image/tmpqklezoyk.png)调用GlideException#LogRootCauss(字符串)获取更多详细原因(1/1):类java。木卫一。FileNotFoundException:无内容提供程序:http://10.0.2.2:5000/image/tmpqklezoyk.png07-30 20:51:38.041 18903-18903/com。实例穆罕默德·马杜斯曼。项目I/Glide:根本原因(1/1)java。木卫一。FileNotFoundException:无内容提供程序:http://10.0.2.2:5000/image/tmpqklezoyk.png在Android。所容纳之物内容解析程序。android上的openTypedAssetFileDescriptor(ContentResolver.java:1396)。所容纳之物内容解析程序。android上的openAssetFileDescriptor(ContentResolver.java:1247)。所容纳之物内容解析程序。com上的openAssetFileDescriptor(ContentResolver.java:1170)。邦普泰克。滑行负载数据资产文件描述符本地LURIFETCHER。com上的loadResource(AssetFileDescriptorLocalUriFetcher.java:22)。邦普泰克。滑行负载数据资产文件描述符本地LURIFETCHER。com上的loadResource(AssetFileDescriptorLocalUriFetcher.java:13)。邦普泰克。滑行负载数据LocalUriFetcher。com上的loadData(LocalUriFetcher.java:44)。邦普泰克。滑行负载发动机源生成器。com上的startNext(SourceGenerator.java:62)。邦普泰克。滑行负载发动机我的工作。com上的runGenerators(DecodeJob.java:299)。邦普泰克。滑行负载发动机我的工作。com上的runWrapped(DecodeJob.java:269)。邦普泰克。滑行负载发动机我的工作。在java上运行(DecodeJob.java:230)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1162)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:636)。朗。丝线。运行(Thread.java:764)

共有1个答案

齐驰
2023-03-14

这是图书馆弱处理程序

1.将此库添加到生成中。格雷德尔档案。

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毫秒后发送请求。这在您的情况下效果最好,因为您已经说过资源存在。

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

 类似资料:
  • 我已经创建了印地语视频歌曲应用程序,但视频拇指不能显示在视频列表中。(已加载单个图像,但无法加载多个图像阵列。) 使用多图像加载程序库但不加载图像: 滑动: 毕加索: 将请求管理器与glide一起使用: 后台任务方法使用: 请帮助我如何解决这个问题。

  • 我正在尝试加载带有数据绑定的图像。但我一直没有忘记。我的问题在哪里?下面是我的代码和布局结构。 MyItemViewModel。kt 布局xml

  • 以下是用于实现重试逻辑的类 TestRetry类: RetryListener类: 样本测试: 当我执行上述测试时,以下是输出firsttest被执行并通过第二次测试依赖于firsttest并被执行,其失败-重试3次并再次失败第三次测试跳过,因为它依赖于第二次测试。 产量达到预期。 问:因为测试是依赖的,如果其中一个测试失败,我想先执行整个类,有办法吗? 示例:如果secondtest失败,我想再

  • 问题内容: 无论彼此是否成功,我都应该执行几个测试,并且如果这些测试中至少有一个失败,我希望詹金斯/哈德森显示 红灯 。我当前的配置(为简化起见)如下: ci.sh : build.xml : 我怎样才能使所有测试都执行,但是如果三个测试中至少有一个失败,则ant / Jenkins应该会失败? 问题答案: 我发现线程计数设置为“ 1”的任务是可行的解决方法。这不是完美的,但是更改很小: buil

  • 我们正在使用我们的GraphQL后端WebTestClient(SpringBoot)进行测试,但很难确定测试失败的原因。我们的代码如下所示: 我得到的是带有以下消息的stacktrace: Java语言lang.AssertionError:JSON路径“$.data.movie.id”处没有值 ... 原因:com.jayway.jsonpath.PathNotFoundException:路