Glide - 在尝试加载照片时出现回退或错误后调用方法

7

Glide - 在尝试加载照片时回退或出错后调用方法。

你好!

有没有办法检查 Glide 是否从链接中加载照片,或者在链接无效或照片不可用时使用 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

2个回答

12

这对我有帮助:

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

1
谢谢,我之前一直在使用 Picasso 来尝试通过一个 URL 加载图片,如果失败就使用另一个 URL,但是它一直给我报内存不足的错误。使用 Glide 就没有出现这个问题! - Clive Sargeant

5
这对我很有帮助。由于某些原因,如果我在加载失败时不使用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);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接