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
, Следующая таблица объясняет это довольно просто: К сожалению, я не могу вспомнить исходный источник изображения. Пожалуйста, дайте мне знать в комментариях, если вы знаете, чтобы я мог правильно отнести его к первоначальному автору!
Как вы можете видеть из диаграммы выше, действительно достаточно установить заполнитель, только если вы не хотите представлять разные состояния для каждого из них.
Надеюсь, что дерево решений прояснит некоторые ваши вопросы! Извиняюсь, что я не ответил на все части ваших вопросов, но некоторые другие ответы уже сделали это!
Ура!
Вы указываете 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) в свой цепной вызов.
Перегрузочные ошибки включают в себя: