Glide-4.0.0 Отсутствует заполнитель, ошибка, GlideApp и не разрешает заполнитель метода, ошибка

87

Я хочу использовать библиотеку Glide Android, чтобы загрузить изображение и показать его ImageView.

В предыдущей версии мы использовали:

Glide.with(mContext).load(imgUrl)
                .thumbnail(0.5f)
                .placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
                .error(R.drawable.ERROR_IMAGE_NAME)
                .crossFade()
                .diskCacheStrategy(DiskCacheStrategy.ALL)
                .into(imageView);

Но я видел документацию по Glide:

он говорит использовать GlideApp.with()вместоGlide.with()

Меня беспокоит отсутствие заполнителя, ошибка, GlideApp и другие параметры.

Я использую

 compile 'com.github.bumptech.glide:glide:4.0.0'

Где я делаю не так? Со ссылкой на здесь .

Как GlideApp.with()был использован?

API создается в том же пакете, что AppGlideModuleи API, и имеет имя GlideAppпо умолчанию. Приложения могут использовать API, начиная все нагрузки с GlideApp.with()вместо Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);
Ритеш Бхавсар
источник
1
Возможный дубликат Placeholder / Error / Fallback в Glide v4
Oussema Aroua
2
Вы имеете представление о GlideApp? как использовать и когда использовать? .. если нет, пожалуйста, проголосуйте за
Ритеш Бхавсар
вам не хватает шага 2, проверьте это: bumptech.github.io/glide/doc/generatedapi.html
Oussema Aroua,
Следуйте этой документации. Bumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Рохан Павар,

Ответы:

224

Попробуйте использовать RequestOptions :

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);

Glide.with(context)
     .setDefaultRequestOptions(requestOptions)
     .load(url).into(holder.imageView);

РЕДАКТИРОВАТЬ

Если .setDefaultRequestOptions(requestOptions)не работает, используйте .apply(requestOptions):

Glide.with(MainActivity.this)
            .load(url)
            .apply(requestOptions)
            .into(imageview);
 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
            .into(imageview);

 // or this
 Glide.with(MainActivity.this)
            .load(url)
            .apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
            .into(imageview);

РЕДАКТИРОВАТЬ 2 бонус

Вот еще несколько изменений в Glide-4

Спросите
источник
что я также не знаю, что @RiteshBhavsar работает на моем устройстве с новой
библиотекой
@NileshRathod RequestOptions следует использовать в стиле конструктора: RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Александр Ухов,
1
Это обходной путь без GlideApp. См. Github.com/bumptech/glide/issues/1945, чтобы узнать, как добавить GlideApp.
CoolMind
есть ли способ получить вывод Bitmap, подобный этому Bitmap bitmap = Glide output
Випул Чаухан
31

Если вы используете зависимости пакетов Glide, compile 'com.github.bumptech.glide:glide:3.7.0'тогда используйте следующий код:

GlideApp
    .with(your context)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.loading_image)
    .error(R.drawable.error_image)
    .into(myImageView);

Примечание: как в документации ,

Круглые изображения: известно, что CircleImageView / CircularImageView / RoundedImageView имеет проблемы с TransitionDrawable (.crossFade () с .thumbnail () или .placeholder ()) и анимированными GIF-файлами, используйте BitmapTransformation (.circleCrop () будет доступен в версии 4) или .dontAnimate (), чтобы исправить проблему.

Последняя обновленная версия compile com.github.bumptech.glide:glide:4.1.1должна использовать следующий код:

RequestOptions options = new RequestOptions()
                    .centerCrop()
                    .placeholder(R.drawable.default_avatar)
                    .error(R.drawable.default_avatar)
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .priority(Priority.HIGH)
                    .dontAnimate()
                    .dontTransform();

Glide.with(this)
     .load(url)
     .apply(options)
     .into(imageView);

Ознакомьтесь с последней версией Glide, исправлениями ошибок и функциями .

ND1010_
источник
glide - такая странная библиотека для использования, которую они не обновляли на github
Ананд Савджани
Ya @AnandSavjani, они не обновлялись на GitHub, но вы можете найти их обновления по этой ссылке github.com/bumptech/glide/releases
ND1010_
1
Если вам не нравится скольжение, вы можете создать свой собственный способ загрузки изображений, gif, которые также обеспечивают кеширование, и вы можете свободно загружать его в github и всегда обновлять
ND1010_
10

Если вы хотите использовать GlideApp, вам нужно добавить в dependenciesобработчик аннотаций, как на скриншоте:

Как добавить GlideApp в свой проект

Затем включите реализацию AppGlideModule в свое приложение:

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

Не забываем про @GlideModuleаннотацию. Затем вам нужно построить проект. И GlideAppбудет автоматически сгенерирован.

Влад Пилип
источник
1
Он не работал после синхронизации gradle. Но нам нужно провести перестройку, чтобы все заработало.
Рави Ядав
6

Зависимости:

compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'

Добавьте соответствующим образом аннотированную реализацию AppGlideModule:

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;

@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}

Кроме того, если вы использовали опцию jack, чтобы избежать следующих похожих ошибок, вам необходимо использовать предварительную версию Android Studio 3.0.0.

Ошибка: не удалось выполнить задачу ': app: transformJackWithJackForDebug'. com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: еще не реализовано

чжэнь она
источник
6

Нам также не нужно использовать RequestOptions.

Созданный API добавляет класс GlideApp, который обеспечивает доступ к подклассам RequestBuilder и RequestOptions. Подкласс RequestOptions содержит все методы в RequestOptions и любые методы, определенные в GlideExtensions. Подкласс RequestBuilder обеспечивает доступ ко всем методам в сгенерированном подклассе RequestOptions без использования apply:

Использование Glide : -

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

Glide.with(fragment)
    .load(url)
    .apply(centerCropTransform()
        .placeholder(R.drawable.placeholder)
        .error(R.drawable.error)
        .priority(Priority.HIGH))
    .into(imageView);

Использование GlideApp : -

С помощью сгенерированного API RequestOptionsвызовы могут быть встроены:

GlideApp.with(fragment)
    .load(url)
    .centerCrop()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .priority(Priority.HIGH)
    .into(imageView);

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

Шубхам Сейпал
источник
4

За работой

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)
Гурвиндер Сингх
источник
2

Если вы хотите использовать общий заполнитель повсюду в своем приложении, вы можете сделать это следующим образом:

Поскольку мы создаем GlideModule из Glide v4 , вы можете скопировать / вставить этот класс в свой проект, чтобы вы могли использовать класс GlideApp (для дополнительных шагов - следуйте этому) :

@GlideModule
public class SampleGlideModule extends AppGlideModule {
    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        super.applyOptions(context, builder);
        builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
    }

    @Override
    public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
        super.registerComponents(context, glide, registry);
    }
}

Здесь вы можете указать все параметры запроса, чтобы установить их по умолчанию .

Создавая этот класс вам не нужно использовать .placeholderс GlideApp, он будет применяться автоматически.

Пратик Бутани
источник
1
RequestOptions options = new RequestOptions()
            .placeholder(R.drawable.null_image_profile)
            .error(R.drawable.null_image_profile);
    //.centerCrop()
    //.diskCacheStrategy(DiskCacheStrategy.ALL)
    //.priority(Priority.HIGH);

    Glide.with(context).load(imageUrl)
            .apply(options)
            .into(profileImage);
Trk
источник
1
Пожалуйста, добавьте пояснения - простой кодовый блок не так информативен
CertainPerformance