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

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

Итак, я использовал Glide.with(activity).load(fileName).error().into(imageView). Проблема в том, что я не могу понять, что передать в error(). Для этого не требуется идентификатор ресурса. Android Studio говорит, что параметр RequestBuilder? но я не смог найти никакого примера.

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

4 ответов


Если вы используете скольжение v4 затем вы должны использовать RequestOptions включить дополнительные параметры, например centerCrop(), заполнитель(), ошибка(), приоритет() , diskCacheStrategy().

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

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. Он используется для обеспечения более одного трансформация в Glide v4, используя метод transforms ():

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

error () и placeholder () с помощью 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 равен null, и вы можете вызвать повторную попытку, иначе вы можете использовать error drawable сигнализировать другое состояние по сравнению с placeholder или fallback. Следующая диаграмма объясняет это довольно прямолинейно: Diagram showcasing the three possible fail cases of a Glide call к сожалению, я не могу вспомнить исходный источник изображения. Пожалуйста меня знают в комментариях, если вы знаете, поэтому я могу правильно приписать его оригинальному автору!

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

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

Ура!


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

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

также, если вы хотите обратные вызовы на glide для ошибки произошла или завершена, вы можете создать прослушиватель, как это.

 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;

        }

    };
включить .прослушиватель (glideCallback) в вашем цепном вызове загрузки.

перегрузки, ошибки включить:

enter image description here


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

например:

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

ошибка(): ошибки отображаются, когда запрос постоянно терпит неудачу. Ошибка Drawables также отображаются, если запрошенный url / model равен null и no резервный Drawable установлен

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

или

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