类 com.bumptech.glide.load.engine.GlideException:无法加载资源

44

我正在尝试通过 Glide 将一张图片加载到 imageView 中。但是图片无法加载 - 我得到了一个错误。

我正在使用以下代码:

GlideApp.with(context)
    .load(itemData.getThumbnailUri())
    .placeholder(R.mipmap.koya_logo_white)
    .error(R.mipmap.ic_image_loading_error)
    .into(itemBinding.cover);

日志

lide: Load failed for https://s3.amazonaws.com/koya-dev-videos/kindness/8da807aa-1e1e-413d-bf9b-5bb084646593/medialibrary/9456621508/videos/1eb78337-d569-41bd-95ad-153d9098de03.png with size [1080x1080]
class com.bumptech.glide.load.engine.GlideException: Failed to load resource
Cause (1 of 1): class com.bumptech.glide.load.engine.GlideException: Failed LoadPath{StringUri->Object->Drawable}, LOCAL, DataCacheKey{sourceKey=https://s3.amazonaws.com/koya-dev-videos/kindness/8da807aa-1e1e-413d-bf9b-5bb084646593/medialibrary/9456621508/videos/1eb78337-d569-41bd-95ad-153d9098de03.png, signature=EmptySignature}
Cause (1 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{StringUri->Drawable->Drawable}
Cause (2 of 2): class com.bumptech.glide.load.engine.GlideException: Failed DecodePath{StringUri->Bitmap->Drawable}

你正在使用哪个版本的Glide? - Hemant Parmar
我正在使用Glide 4.8.0版本。 - narender sharma
尝试在日志中打印 itemData.getThumbnailUri() 的值,并检查它是否为有效的URI格式。 - Rakhi Dhavale
1
你能找到解决问题的方法吗?我已经有两三天遇到了同样的问题。 - Huseyin Sahin
嘿!有解决方案吗?我在Android 22 API及以下版本上遇到了同样的问题 - 无法加载像相机4MP屏幕一样的URL,例如:https://fs05.naveksoft.com:62121/a109b1b0-4f05-45f2-9e55-35d672d13038/preview.mp4?token=e7638665ffdd79a0924b71bb0da12ed95e39981a-iVsYbGnEyq6scGe-1568397893-1568311493。 - nicolas asinovich
显示剩余4条评论
20个回答

0

和 @ievgen 的答案一样。

  • 检查您的互联网连接
  • Android 89 的 HTTPS 连接问题,请参见 此处
  • 问题可能是由于无效的 URL 或末尾有空格或 / 斜杠引起的

我的项目从 TMDB 获取 API,并使用 val BASE_IMAGE = http://image.tmdb.org/t/p/w780/ 注意最后的 w780/ "斜杠"?

它被错误地连接,例如:

W/Glide: Load failed for http://image.tmdb.org/t/p/w780//qJdfO3ahgAMf2rcmhoqngjBBZW1.jpg with size [-2147483648x-2147483648]

删除末尾的 / 斜杠解决了我的问题。例如,从:

http://image.tmdb.org/t/p/w780/ -> http://image.tmdb.org/t/p/w780

这是我的设置:

Glide: 4.9.0
Android Studio: 3.4.1 (Grale Build Tools)

0

我曾经遇到过同样的问题,这是解决方法:将http替换为https。

   if (url.startsWith("https")) {
        Glide.with(imageView.getContext())
                .load(url)
                .error(R.drawable.thumblin)
                .fitCenter()
                .into(imageView);
    } else {
        Glide.with(imageView.getContext())
                .load(url.replace("http","https"))
                .error(R.drawable.thumblin)
                .fitCenter()
                .into(imageView);
    }

-1

我在使用 Glide + AndroidSVG 时遇到了同样的问题,一些矢量图像无法加载,并且需要在 SVG 和 PNG 之间进行检查,以便 Glide 正确处理。

这里是 @sadegh 提出的另一种解决方案。请直接回答。

另一种方式:kotlin + Coil

此解决方案可与 .svg、.png、.jpg 很好地配合使用

添加依赖项:

//Coil (https://github.com/coil-kt/coil)
implementation("io.coil-kt:coil:1.4.0")
implementation("io.coil-kt:coil-svg:1.4.0")

将此函数添加到您的代码中:

fun ImageView.loadUrl(url: String) {

val imageLoader = ImageLoader.Builder(this.context)
    .componentRegistry { add(SvgDecoder(this@loadUrl.context)) }
    .build()

val request = ImageRequest.Builder(this.context)
    .crossfade(true)
    .crossfade(500)
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .data(url)
    .target(this)
    .build()

imageLoader.enqueue(request)
}

然后在您的活动或片段中调用此方法:
  imageView.loadUrl(url)
  // url example : https://upload.wikimedia.org/wikipedia/commons/3/36/Red_jungle_fowl_white_background.png

-1

这在 Kotlin 中对我起作用

 Glide.with(context).load(url)

                    .override(Target.SIZE_ORIGINAL,Target.SIZE_ORIGINAL).listener(
                                object : RequestListener<Drawable> {
                                    override fun onLoadFailed(
                                        e: GlideException?,
                                        model: Any?,
                                        target: Target<Drawable>?,
                                        isFirstResource: Boolean
                                    ): Boolean {
                                        return false
                                    }

                                    override fun onResourceReady(
                                        resource: Drawable?,
                                        model: Any?,
                                        target: Target<Drawable>?,
                                        dataSource: DataSource?,
                                        isFirstResource: Boolean
                                    ): Boolean {
                                        return false
                                    }

                                }
                            ).into(imageView)

2
请在您的答案中添加更多细节,例如工作代码或文档引用,以便进一步扩展。 - Community

-1

对我来说,问题出在 Http... 或者 HTTP... 上。我把它改成了小写的 http...,然后就可以工作了。

GlidePicasso 都遇到了同样的问题。


-1

出现此错误的另一个可能原因是:内存空间不足

检查您设备的可用内部存储空间。如果太低,请释放一些空间。


-1

检查您传递的Uri是否正确,对我来说,问题在于传递的Uri中重复添加了所需的BaseUri。


-2

尝试从模拟器中卸载您的应用程序,然后再次尝试编译。这对我有用。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

-5

我们使用AWS并根据我的经验发现,Glide无法加载HTTP URL,但如果我们使用HTTPS覆盖HTTP,它可以正常工作。

此外,如果加载大小为1800x1800或更大的图片,则会失败。

为什么?由于堆较小,某些特定设备无法加载那么多图像数据。因此,最好的选择是使用RequestOptions并将其应用于Glide

try {
    String url = "" /* URL of Image */;

    if (url.startsWith("http://"))
        url = url.replace("http://", "https://");

    RequestOptions requestOptions = new RequestOptions();
    requestOptions.placeholder(R.mipmap.app_icon);
    requestOptions.error(R.mipmap.app_icon);
    Glide
        .with(context)
        .setDefaultRequestOptions(requestOptions)
        .load(url)
        .into(imgView);
} catch (Exception e) {
    e.printStackTrace();
}

-7

我认为您没有为应用程序添加访问互联网的权限。

请将以下内容添加到您的 AndroidManifest.xml 中:

<uses-permission android:name="android.permission.INTERNET"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接