Glide - call method after fallback or error when trying load photo

天大地大妈咪最大 提交于 2020-01-11 05:59:05

问题


Glide - call method after fallback or error when trying load photo.

Hi!

Is there any a way to check if Glide load photo from link or use fallback/error when link isn't valid or photo isn't available?

I mean, I want to call a method (load other photo) when Glide doesn't load photo.

This is my Glide e.g.:

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

I tried to compare ConstantValues - holder.photo.getDrawable().getConstantState().equals(mActivity.getResources().getDrawable(R.drawable.bg_gradient).getConstantState()) but got NullPointerException.


回答1:


This helps me:

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



回答2:


This is working for me. For some reason, if I don't use postDelayed on load failed, the app is crashing.

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


来源:https://stackoverflow.com/questions/38250802/glide-call-method-after-fallback-or-error-when-trying-load-photo

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!