您的位置:

关于glide的IOException("Received unexpected drawable type for animated webp, failing: " + decoded)

  发布时间:2025-03-23 18:11:55
介绍了Glide出现IOException异常的原因及解决方案,可通过禁用对动态WebP格式的支持来解决该问题,提供了代码示例和具体例子

问题原因

导致 Glide 出现 IOException("Received unexpected drawable type for animated webp, failing: " + decoded) 的原因通常是由于 Glide 在解码动态 webp 图像时,发现图像类型不符合预期,导致了解码失败。通常出现这个问题的原因可能是动态 webp 图像文件本身损坏、格式不正确、或者某些特定条件下的解码错误等。

解决方案

出现这个异常是因为Glide无法处理动态WebP格式的图片。为了解决这个问题,可以通过禁用Glide对动态WebP格式的支持来避免这个异常。具体的解决方案是在Glide的配置中禁用对动态WebP的支持,代码示例如下:


Glide.get(context).getRegistry().replace(GifDrawable.class, Drawable.class, new GifDrawableTranscoder())
    .append(InputStream.class, GifDrawable.class, new GifDrawableByteStreamLoader.Factory())
    .append(ByteBuffer.class, GifDrawable.class, new GifDrawableByteBufferLoader.Factory())
    .append(File.class, GifDrawable.class, new GifDrawableFileLoader.Factory())
    .append(Drawable.class, GifDrawable.class, new GifResourceDecoder(context.getResources(), Glide.getBitmapPool()));

通过上述代码,可以将对动态WebP的支持替换为对GIF的支持,从而避免IOException异常的出现。这样做可以确保Glide正常加载动态WebP格式的图片,并避免错误。

具体例子

问题的根本原因是Glide库无法正确解码WebP格式的动画图片。 这个问题通常出现在尝试加载WebP格式的动画图片时,Glide无法识别该图片类型,导致出现IOException异常。 为了解决这个问题,可以通过禁用Glide对动画WebP格式的支持来避免该异常。可以通过在GlideModule或Glide的构造函数中配置Glide的Option来禁用对动画WebP格式的支持。 下面是一个使用Glide加载图片时出现该问题的具体例子以及解决方法的代码示例:


// 导入Glide库
implementation 'com.github.bumptech.glide:glide:4.12.0'

// 加载WebP格式的动画图片时出现问题的代码示例
GlideApp.with(context)
        .load("your_webp_url_here")
        .into(imageView);

// 解决方法:禁用Glide对动画WebP格式的支持
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        builder.setDefaultRequestOptions(new RequestOptions().disallowHardwareConfig().format(DecodeFormat.PREFER_ARGB_8888).dontAnimate());
    }
}

通过在GlideModule中配置disallowHardwareConfig()dontAnimate()方法来禁用Glide对动画WebP格式的支持,从而避免出现IOException异常。