Glide - 在尝试加载照片时回退或错误后调用方法
Glide - call method after fallback or error when trying load photo
Glide - 在尝试加载照片时回退或出错后调用方法。
嗨!
有没有办法检查 Glide
是否从 link 加载照片或在 link 无效时使用 fallback
/error
或者照片不可用?
我的意思是,我想在 Glide 不加载照片时调用一个方法(加载其他照片)。
这是我的 Glide 例如:
Glide
.with(mActivity)
.load(news.getPagemap().getCseThumbnail().get(0).getSrc())
.fallback(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient)
.centerCrop()
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.photo);
我试图比较 ConstantValues
- holder.photo.getDrawable().getConstantState().equals(mActivity.getResources().getDrawable(R.drawable.bg_gradient).getConstantState())
但得到 NullPointerException
.
这对我有帮助:
private void loadPicture(final ViewHolder holder, String photoUrl, final Boolean shouldLoadAgain) {
holder.progressBar.setVisibility(View.VISIBLE);
Glide
.with(mActivity)
.load(photoUrl)
.fallback(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient)
.centerCrop()
.crossFade()
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
if (shouldLoadAgain)
loadPicture(holder, mPhotoUrl, false);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
return false;
}
})
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.photo);
}
这对我有用。出于某种原因,如果我在加载失败时不使用 postDelayed,应用程序就会崩溃。
private void updateImage(final String image) {
Glide
.with(this)
.load(image)
.apply(new RequestOptions()
.placeholder(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
updateImage(image);
}
}, 1000);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(holder.photo);
}
Glide - 在尝试加载照片时回退或出错后调用方法。
嗨!
有没有办法检查 Glide
是否从 link 加载照片或在 link 无效时使用 fallback
/error
或者照片不可用?
我的意思是,我想在 Glide 不加载照片时调用一个方法(加载其他照片)。
这是我的 Glide 例如:
Glide
.with(mActivity)
.load(news.getPagemap().getCseThumbnail().get(0).getSrc())
.fallback(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient)
.centerCrop()
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.photo);
我试图比较 ConstantValues
- holder.photo.getDrawable().getConstantState().equals(mActivity.getResources().getDrawable(R.drawable.bg_gradient).getConstantState())
但得到 NullPointerException
.
这对我有帮助:
private void loadPicture(final ViewHolder holder, String photoUrl, final Boolean shouldLoadAgain) {
holder.progressBar.setVisibility(View.VISIBLE);
Glide
.with(mActivity)
.load(photoUrl)
.fallback(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient)
.centerCrop()
.crossFade()
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
if (shouldLoadAgain)
loadPicture(holder, mPhotoUrl, false);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
holder.progressBar.setVisibility(View.GONE);
return false;
}
})
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.photo);
}
这对我有用。出于某种原因,如果我在加载失败时不使用 postDelayed,应用程序就会崩溃。
private void updateImage(final String image) {
Glide
.with(this)
.load(image)
.apply(new RequestOptions()
.placeholder(R.drawable.bg_gradient)
.error(R.drawable.bg_gradient))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
updateImage(image);
}
}, 1000);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
})
.into(holder.photo);
}