Класс com.bumptech.glide.load.engine.GlideException: не удалось загрузить ресурс

Я пытаюсь загрузить изображение в imageView через Glide. Но изображение не загружается - получаю ошибку. Я использую следующий код

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}

какую версию скольжения вы используете?

Hemant Parmar 02.04.2019 13:01

Я использую Glide версии 4.8.0.

narender sharma 02.04.2019 13:06

Попробуйте напечатать значение itemData.getThumbnailUri() в журналах и проверьте, является ли его допустимый формат URI или нет.

Rakhi Dhavale 02.04.2019 13:12

Не могли бы вы найти решение вашей проблемы? У меня такая же проблема уже два-три дня.

Huseyin Sahin 05.05.2019 11:43

Привет! Какое решение?? У меня такая же проблема на Android 22 API и ниже - не могу загрузить URL-адрес, например экран камеры 4MP, например: fs05.naveksoft.com:62121/a109b1b0-4f05-45f2-9e55-35d672d1303‌​8/…

nicolas asinovich 13.09.2019 15:19

Даже я тоже. Столкнувшись с той же проблемой, при первой загрузке изображений я столкнулся с этой проблемой со второй загрузки, изображения загружаются из кеша, поэтому они загружаются нормально.

Sri Harsha Damarla 17.09.2020 07:31

кто-нибудь нашел решение этой проблемы?

Sri Harsha Damarla 17.09.2020 07:32

Использование 4.11 Glide также сталкивается с той же проблемой в зависимости от производителя и модели телефона ... есть ли решение?

Ready Android 18.09.2020 14:56
40
9
57 183
16

Ответы 16

Я также столкнулся с этой проблемой. Это ошибка со стороны скольжения. Используйте последнюю версию скольжения.

repositories {
 mavenCentral()
 google()
}

dependencies {
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

Убедитесь, что itemData.getThumbnailUri() не содержит пустого места

Попробуйте это решение...

String url = "https://s3.amazonaws.com/koya-dev-videos/kindness/8da807aa-1e1e-413d-bf9b-5bb084646593/medialibrary/9456621508/videos/1eb78337-d569-41bd-95ad-153d9098de03.png";
    
GlideApp.with(context).load(url)
        .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
        .error(R.drawable.glide_app_img_loader)
        .listener(new RequestListener<Drawable>() {
             @Override
             public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                 return false;
             }
    
             @Override
             public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                 return false;
             }
        }).into(imageView);

class com.bumptech.glide.load.engine.GlideException: Не удалось загрузить ресурс Было 2 причины: com.bumptech.glide.load.HttpException(Forbidden) com.bumptech.glide.load.HttpException(Forbidden) вызов GlideException#logRootCauses (Строка) для более подробной информации. Причина (1 из 3): класс com.bumptech.glide.load.engine.GlideException: Ошибка при получении данных, класс java.io.InputStream, REMOTE

narender sharma 02.04.2019 13:39

Вы уверены, что используете только URL-адреса HTTPS?

VIISHRUT MAVANII 04.04.2019 08:04

@VishrutMavani спасибо за отличный совет! Я понятия не имел, что ты можешь это сделать.

Fattie 05.04.2021 20:40

Я не использую URL-адрес, но внутреннее хранилище и переопределение с целевыми размерами сделали свое дело! Спасибо!

Hector Costa 08.04.2021 16:22

Поскольку мы используем AWS, и мой опыт показал, что Glide не может загружать URL-адреса HTTP, но отлично работает, если мы используем 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();
}

Решение работает для меня:
1. Обновите build.gradle (модуль: приложение)

    implementation "com.github.bumptech.glide:glide:4.7.1"
        kapt "com.github.bumptech.glide:compiler:4.7.1"
        implementation "com.squareup.okhttp3:okhttp:3.14.0"
        implementation ('com.github.bumptech.glide:okhttp3-integration:4.7.1'){
            exclude group: 'glide-parent'
        }
  1. Установите тайм-аут для скольжения

     @GlideModule
        class MyAppGlideModule : AppGlideModule() {
            override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
                val client = OkHttpClient.Builder()
                    .readTimeout(30, TimeUnit.SECONDS)
                    .connectTimeout(30, TimeUnit.SECONDS)
                    .build()
                val factory = OkHttpUrlLoader.Factory(client)
                glide.registry.replace(GlideUrl::class.java, InputStream::class.java, factory)
            }
        }
    

Другая причина появления этой проблемы — телефон/эмулятор не имеет подключения к Интернету.

То же самое с ответами @ievgen.

  • Проверьте подключение к Интернету
  • Проблема подключения HTTPS для Андроид 8 или 9, см. здесь
  • Проблема может возникнуть из-за недопустимого URL-адрес или наличия пробела в конце или / косой черты.

Мой проект получал API от TMDB и использовал 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)

Для меня проблема была с Http... или HTTP.... Я изменил его на http... (все строчные буквы), и это сработало.

И у Glide, и у Picasso была одна и та же проблема.

Другая возможная причина возникновения этой ошибки: not having enough free space on the internal memory.

Проверьте свободное место во внутренней памяти вашего устройства. Если он слишком низкий, освободите место.

У меня также была эта проблема. Когда я написал такой макет

<FrameLayout 
    android:layout_width = "@dimen/view_width"
    android:layout_height = "@dimen/view_height">

    <ImageView
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"/>
</FrameLayout>

и я изменил это на

<FrameLayout 
    android:layout_width = "@dimen/view_width"
    android:layout_height = "@dimen/view_height">

    <ImageView
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"/>
</FrameLayout>

Это решение сработало для меня.

Самое простое решение

Добавить,

android:usesCleartextTraffic = "true"

внутри вашего <application/> тега AndroidManifest.xml файла.

@IlyaGazman точно, значение по умолчанию для целевого уровня API 27 или ниже — «true». Приложения, нацеленные на уровень API 28 или выше, по умолчанию имеют значение «false».

Kishan Solanki 15.03.2021 05:32

это сработало для меня! вам это не нужно при использовании API уровня 8 и ниже, но при работе с API 8.1 и выше вам понадобится это конкретное решение

Theophilus Abiola Alamu 18.03.2021 18:07

Создайте декодер изображения следующим образом:

class PageDecoder(
    private val bitmapPool: BitmapPool
) : ResourceDecoder<InputStream, Bitmap> {

    companion object {
        val PAGE_DECODER: Option<Boolean> = Option.memory("abc")
    }

    override fun decode(source: InputStream, width: Int, height: Int, options: Options): Resource<Bitmap>? {
        return BitmapResource.obtain(BitmapFactory.decodeStream(source), bitmapPool)
    }

    override fun handles(source: InputStream, options: Options): Boolean = options.get(PAGE_DECODER) ?: false

}

В вашем модуле скольжения должно применяться это:

override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        registry.prepend(InputStream::class.java, Bitmap::class.java, PageDecoder(glide.bitmapPool))
    }

В действии вы загружаете изображение, используя это:

GlideApp.with(context)
        .load("Image url or path, etc")
        .apply(GlideOptions.option(PageDecoder.PAGE_DECODER, true))
        .into(imageview)

Это работа для меня, я надеюсь, что это было полезно для вас.

Проверьте правильность передаваемого вами Uri, для меня это была ошибка в передаче Uri, поскольку я дважды добавлял требуемый BaseUri

Я думаю, вы не добавили разрешение для вашего приложения на доступ в Интернет.

Add this into your AndroidManifest.xml:

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

Это сработало для меня в Котлине

 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)

Пожалуйста, добавьте дополнительную информацию, чтобы расширить свой ответ, например, рабочий код или ссылки на документацию.

Community 10.09.2021 12:05

для меня URL был " https//app.domain.." проблема здесь в пробеле в начале URL

Glide.with(this)
   .load(imageItem.img_url.toUri().buildUpon().scheme("https").build())
   .into(mars_image)

Попробуйте расширить свой URL-адрес с помощью load(imageItem.img_url.toUri().buildUpon().scheme("https").build()) этого расширения для https.

Другие вопросы по теме