Glide-4.0.0 Відсутній заповнювач, помилка, GlideApp і не вирішує заповнювач методу, помилка


84

Я хочу скористатися бібліотекою 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і, і GlideAppза замовчуванням називається . Додатки можуть використовувати API, запускаючи всі завантаження GlideApp.with()замість Glide.with():

GlideApp.with(fragment)
   .load(myUrl)
   .placeholder(placeholder)
   .fitCenter()
   .into(imageView);


2
У вас є ідея про GlideApp? як користуватися і коли використовувати? .. якщо ні, будь ласка, проголосуйте
Ritesh Bhavsar

ви пропускаєте крок
Oussema Aroua

Дотримуйтесь цієї документації bumptech.github.io/glide/doc/getting-started.html#applicatio‌ ns
Rohan Pawar

Відповіді:


222

Спробуйте використовувати 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 RequestOption слід використовувати у стилі будівельника: 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
Vipul Chauhan

30

Якщо ви використовуєте залежності пакета 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 () with .thumbnail () or .placeholder ()) та анімовані GIF-файли, використовуйте BitmapTransformation (.circleCrop () або буде доступний у v4) .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, виправлення помилок та функції .


glide - така дивна бібліотека для використання, яку вони не оновлювали на github
Anand Savjani

Ya @AnandSavjani, вони не оновлювались у GitHub, але ви можете знайти їх оновлення за цим посиланням github.com/bumptech/glide/releases
ND1010_

1
Якщо вам не подобається glide, тоді ви можете створити свій власний спосіб завантажувати зображення, 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{}

Крім того, якщо ви використовували опцію роз’єму, щоб уникнути таких подібних помилок, вам потрібно використовувати попередній перегляд 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 може бути зручнішим у більшості випадків.



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);

1
Будь ласка, додайте пояснення - лише простий блок коду не є
всеоправданим
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.