Glide 4.3.1: как использовать error()?

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

Итак, я использовал Glide.with(activity).load(fileName).error().into(imageView), Проблема в том, что я не могу понять, что перейти к ошибке (). Это не занимало ID ресурса, который можно нарисовать. Android-студия сообщает, что параметром является RequestBuilder?, Но я не смог найти ни одного примера.

"Ошибка: Несоответствие типов: выведенный тип имеет тип Int, но RequestBuilder? Ожидался"

4 ответа

Решение

Если вы используете Glide v4, то вам нужно использовать RequestOptions для включения большего количества опций, которые вы хотите, например centerCrop (), placeholder (), error (), priority (), diskCacheStrategy ().

Поэтому после использования RequestOptions ваш Glide будет выглядеть так:

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

Glide.with(mContext).load(imgUrl)
                    .apply(options)
                    .into(picThumbnail);

Теперь вы можете показать изображение ошибки, установить кеш диска и т. Д.

GlideApp также является частью Glide v4. Он используется для предоставления более одного Transformation в Glide v4, используя метод transforms ():

GlideApp.with(mContext)
  .load(imgUrl)
  .transforms(new CenterCrop(), new RoundedCorners(20))
  .into(target);

error () и заполнитель () с помощью GlideApp-

GlideApp.with(mContext)
            .load(imageUrl)
            .placeholder(R.drawable.placeholder_image)
            .error(R.drawable.error_image)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .into(offerImage);

Чтобы ответить на ваш второй вопрос, и этот вопрос является частью названия, вы действительно должны заботиться только о error() если вы ожидаете, что URL-адрес, который вы вызываете, или drawable / bitmap равен нулю, и вы можете вызвать повторную попытку, в противном случае вы можете использовать error можно сигнализировать о другом состоянии по сравнению с placeholder или же fallback, Следующая таблица объясняет это довольно просто: Диаграмма, демонстрирующая три возможных случая сбоя вызова Glide К сожалению, я не могу вспомнить исходный источник изображения. Пожалуйста, дайте мне знать в комментариях, если вы знаете, чтобы я мог правильно отнести его к первоначальному автору!

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

Надеюсь, что дерево решений прояснит некоторые ваши вопросы! Извиняюсь, что я не ответил на все части ваших вопросов, но некоторые другие ответы уже сделали это!

Ура!

Вы указываете Drawable в error() и если Glide исключение, это изображение показывается как фиктивное изображение. Изображение указано в error() Метод будет ресурсом вашего проекта.

Например:

Glide.with(this)
            .load(urlImage)
            .error(R.drawable.error_image).into(new GlideDrawableImageViewTarget(imageView) {
                @Override
                public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
                    super.onResourceReady(drawable, anim);
                }
            });

error (): ошибки Drawables показываются, когда запрос постоянно терпит неудачу. Drawables с ошибками также отображаются, если запрошенный URL / модель имеет значение NULL и не установлен резервный Drawable.

GlideApp.with(fragment)
  .load(url)
  .error(R.drawable.error)
  .into(view);

или же

GlideApp.with(fragment)
  .load(url)
  .error(new ColorDrawable(Color.RED))
  .into(view);

Glide хочет, чтобы вы передавали какое изображение для рисования вы должны показать, если при загрузке произошла ошибка. Этот параметр не обязателен, если он вам не нравится. Я обычно просто использую.

 Glide.with(mContext).load(myModel.getDefaultThumbnailUrl()).dontAnimate().centerCrop().override(mImageSize, mImageSize).into(itemViewHolder.imgHolder);

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

 RequestListener<String, GlideDrawable> glideCallback = new RequestListener<String, GlideDrawable>(){
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            Toast.makeText(myActivity.this, getString(R.string.error_loading_from_url), Toast.LENGTH_LONG).show();
            return false;

        }
        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    convertCardToBitmap(mSendWhenComplete);

                }
            },500);

            return false;

        }

    };

затем включите.listener(glideCallback) в свой цепной вызов.

Перегрузочные ошибки включают в себя:

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