Glide не загружает реальное изображение и застрял на заполнителе

У меня есть довольно простое изображение загрузки из кода строки сервера:

Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).into(view);

По какой-то причине я всегда зацикливаюсь на отображении заполнителя, а не на реальном изображении!

Я убедился, что передается действующий и рабочий URL. И, если я использую тот же код без заполнителя, он отлично работает

Glide.with(view.getContext()).load(url).into(view);

Есть идеи, почему?


person TareK Khoury    schedule 03.04.2016    source источник
comment
По соображениям безопасности Android не поддерживает некоторые URL-адреса. Подумайте добавить android:usesCleartextTraffic="true" в ваш файл манифеста. Подробный ответ находится здесь   -  person TeachMeJava    schedule 21.07.2019


Ответы (12)


Попробуйте добавить .dontAnimate() Это тоже вызвано TransitionDrawable, и это кажется так, потому что после прокрутки нет анимации, потому что она кешируется.

Правильный код

Glide.with(view.getContext()).load(url).placeholder(R.drawable.default_profile).dontAnimate().into(view);

Надеюсь, это будет вам полезно.

person Abbes Yassine    schedule 03.04.2016
comment
По какой-то странной причине это решило проблему. Переход некрасивый, правда без анимации. - person TareK Khoury; 04.04.2016
comment
Местозаполнителя нет в Glide v4.0.0 - person Mahdi; 07.08.2017
comment
Как говорится в README.md Glide, известно, что CircleImageView / CircularImageView / RoundedImageView имеет проблемы с TransitionDrawable (.crossFade () с .thumbnail () или .placeholder ()) и анимированными GIF-файлами, используйте BitmapTransformation (.circleCrop () будет доступно в версии 4) или .dontAnimate (), чтобы устранить проблему. - person Veer; 29.09.2017

Проверьте, добавили ли вы в манифесте разрешение на доступ в Интернет:

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

Glide не запускает исключение, если нет подключения к Интернету.

person Ivo Stoyanov    schedule 02.03.2017
comment
Действительно ! Это решило проблему для меня. Я думаю, было бы более полезно, если бы glide вызывал исключение, когда разработчик совершает такую ​​ошибку. - person Thilaw Fabrice; 09.03.2017

Добавьте android: usesCleartextTraffic = "true" в тег приложения в манифесте и проверьте, указано ли разрешение в Интернете в том же файле манифеста: -

person Diptiman Mukherjee    schedule 29.03.2020

Используйте ProgressBar как загружаемый gif

Glide.with(context).
        load(url)
        .listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                progressBar.setVisibility(View.GONE);
                return false;
            }
        })
        .crossFade(1000)
        .into(imageView);
person 庄景鹏    schedule 20.12.2016

Если кто-то столкнется с этим в будущем, вам может потребоваться добавить

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

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

person user2415963    schedule 12.05.2017

Ниже приведено странное исправление, которое сработало для меня.

Следующее всегда терпит неудачу (12 попыток) - я никогда не вижу реального изображения:

Glide.with(context)
 .load(url)
 .asBitmap()
 .into(new SimpleTarget<Bitmap>(iconWidth, iconHeight) { ... }

У меня всегда получается следующее (12 попыток) - я всегда вижу реальное изображение:

Glide.with(context)
 .load(url)
 .asBitmap()
 .listener(new RequestListener() {
    public boolean onException(Exception e,Object o,Target t,boolean b)
               {return false;}
    public boolean onResourceReady(Object o,Object p,Target t,boolean b,boolean c)  
               {return false;}})
 .into(new SimpleTarget<Bitmap>(iconWidth, iconHeight) { ... }

Как видите, разница только в том, что я добавил слушателя. В этом нет никакого смысла, но эти испытания были проведены довольно тщательно, так что я продолжу.

person Jo Jo    schedule 11.10.2018
comment
странно ... это исправило это и для меня ... есть идеи, почему? - person LifeQuestioner; 07.06.2019

Не используйте переход или анимацию для Glide - это решит вашу проблему.

Код:

Glide.with(context)
    .load(horizontalHappyHourList.get(position).getImage())
//  .transition(DrawableTransitionOptions.withCrossFade(400)) //Optional
    .apply(RequestOptions.diskCacheStrategyOf(DiskCacheStrategy.RESOURCE)
    .error(R.drawable.no_image))
    .into(holder.imageView);
person Suvarthee Chakravarti    schedule 17.11.2018

Ни одно из вышеперечисленных решений не помогло мне. Проблема может быть в используемом заполнителе. Если в представлении, которое вы используете для загрузки изображения, есть заполнитель, это вызывает некоторые проблемы. Похоже, что удаление этого заполнителя по какой-то причине решает эту проблему.

Итак, если представление (Изображение), которое вы пытаетесь раздуть, имеет заполнитель, например android: src = "@ mipmap / placeholder", удалите его.

        <ImageView
            android:id="@+id/imgGallery"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:src="@mipmap/rugova1" />

нравится

 <ImageView
            android:id="@+id/imgGallery"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            />

У меня это сработало.

person Bleron Qorri    schedule 25.06.2019

Если вы пытаетесь выполнить следующие шаги:

  • Разрешение ИНТЕРНЕТ уже добавлено как в манифесте, так и программно
  • usesCleartextTraffic: если уже упоминалось в манифесте, даже если изображение не загружается в ImageView

Тогда попробуйте это:

  • добавьте в эту строку тега приложения манифеста
android:usesCleartextTraffic="true"
  • добавьте следующий код в действие или фрагмент вверху, в котором вы пытаетесь выполнить операцию
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
person Rahul Kamble    schedule 04.02.2021

Кажется странным, но я могу догадаться только о том, что ваш URL-адрес действителен, как вы уже сказали. Ваш пульт загружается, даже когда он применяется к вашему изображению, но ваш заполнитель каким-то образом скрывает его. В Glide есть некоторые ошибки, связанные с заполнителями.

Я предлагаю попробовать следующее:

Glide.with(view.getContext()).load(url).
placeholder(R.drawable.default_profile).fitCenter().into(view);

Таким образом, хитрость заключается в том, что заполнитель устанавливается через setImageDrawable(), поэтому ImageView будет просто отображать его как обычно, но вы говорите Glide явно использовать fitCenter, который будет хорошо соответствовать загруженному изображению в разложенном размере ImageView с помощью преобразования, а затем установить его с помощью setImageDrawable() . Поскольку подогнанное изображение идеально подходит, центр будет просто рисовать изображение, покрывающее всю область обзора.

Попробуйте.

person theJango    schedule 03.04.2016

Может кому-то помочь :) Моя проблема заключалась в исключении из политики сетевой безопасности. URL-адрес, запрошенный Glide, был заблокирован Android из-за политики безопасности.

Исправлено добавлением желаемого домена в белый список. Проверьте здесь

com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 cause:
java.net.UnknownServiceException(CLEARTEXT communication to maps.googleapis.com not permitted by the network security policy)
 call GlideException#logRootCauses(String) for more detail

Самое сложное, что это не отображалось в обычном журнале.

person Ebin Joy    schedule 18.01.2020

Если ничего из вышеперечисленного не решает эту проблему, и вы устанавливаете свойство src в ImageView, это не сработает. Я ошибочно установил 'src' в ImageView в xml, и вытащив это, я решил это для меня.

person Olamide Adeleye    schedule 10.03.2020