Glide - метод вызова после отката или ошибки при попытке загрузить фото

Glide - метод вызова после отката или ошибки при попытке загрузить фото.

Hi!

Есть ли способ проверить, Glide загрузить фотографию по ссылке или использовать _2 _ / _ 3_, если ссылка недействительна или фотография недоступна?

То есть, я хочу вызвать метод (загрузить другую фотографию), когда 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.


person y07k2    schedule 07.07.2016    source источник


Ответы (2)


Это мне помогает:

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);
}
person y07k2    schedule 22.07.2016
comment
Спасибо за это, я использовал Picasso, чтобы сделать то же самое (попробуйте загрузить изображение, используя один URL-адрес, а если он не удастся, используйте другой), но он продолжал выдавать мне ошибки из-за нехватки памяти. никаких ошибок при использовании скольжения! - person Clive Sargeant; 06.09.2016

Это работает для меня. По какой-то причине, если я не использую 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);
}
person Sethuraman Srinivasan    schedule 04.11.2019