Ответ 1
Кажется, это ошибка с видимостью ImageView, если она невидима или ушла. Я открыл здесь проблему: https://github.com/bumptech/glide/issues/618
Я использую Glide для загрузки изображений, и я добавил слушателя, чтобы узнать, когда ресурс готов или была ошибка любого типа:
Glide.with(mContext)
.load(url)
.placeholder(R.drawable.glide_placeholder)
// use dontAnimate and not crossFade to avoid a bug with custom views
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
// do something
return true;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
// do something
return true;
}
})
.into(mCustomImageView);
Приложение никогда не запускается внутри onResourceReady
или onException
, но если я удалю прослушиватель и скачаю асинхронную загрузку без обратного вызова, он будет работать правильно:
Glide.with(mContext)
.load(url)
.placeholder(R.drawable.glide_placeholder)
// use dontAnimate and not crossFade to avoid a bug with custom views
.dontAnimate()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mCustomImageView);
Я попробовал также с GlideDrawableImageViewTarget
вместо прослушивателя получать обратные вызовы, но приложение запускается внутри onLoadStarted
, но никогда не запускается внутри onLoadCleared
, onLoadFailed
и onResourceReady
.
Кажется, это ошибка с видимостью ImageView, если она невидима или ушла. Я открыл здесь проблему: https://github.com/bumptech/glide/issues/618
Вот один из способов сделать это:
Glide.with(context).load(...)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
//TODO handle error images while loading photo
return true
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
//TODO use "resource" as the photo for your ImageView
return true
}
}).submit()
В один и тот же вопрос. Имея onResourceReady return false помогло.
Столкнулся с той же проблемой, потому что ширина и высота моего ImageView были 0,0. Дали моему ImageView ширину по умолчанию и Высоту, это решило мою проблему.
Вам просто нужно изменить возврат onResourceReady
и onLoadFailed
с true на false.
У меня на glide 4.9.1
.
если вы посмотрите на комментарии RequestListener, вы должны понимать.