Подтвердить что ты не робот

Загружать изображения из дискового кэша с помощью Picasso, если в автономном режиме

У меня есть некоторые изображения, которые я загружаю с разных веб-сайтов при запуске приложения, делая следующее:

Picasso.with(context).load(image_url).fetch();

Теперь предположим, что пользователь закрывает приложение и отключается. Когда приложение запускается снова, Picasso отображает изображения следующим образом:

Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);

Проблема в том, что некоторые изображения загружаются из кеша диска (желтый треугольник в режиме отладки), а для остальных Picasso показывает местозаполнитель.

Почему? Я ожидаю, что каждое изображение загрузится из кеша диска.

4b9b3361

Ответ 1

Вы можете использовать этот код в этой стратегии. Picasso будет искать изображения в кеше, и если он не удался, тогда изображение будет загружено через сеть.

 Picasso.with(context)
                    .load(Uri.parse(getItem(position).getStoryBigThumbUrl()))
                    .networkPolicy(NetworkPolicy.OFFLINE)
                    .into(holder.storyBigThumb, new Callback() {
                        @Override
                        public void onSuccess() {

                        }

                        @Override
                        public void onError() {
                            // Try again online if cache failed
                            Picasso.with(context)
                                    .load(Uri.parse(getItem(position)
                                            .getStoryBigThumbUrl()))
                            .placeholder(R.drawable.user_placeholder)
                            .error(R.drawable.user_placeholder_error)
                                    .into(holder.storyBigThumb);
                        }
                    });

Ответ 2

Сделайте это:

Picasso.with(this)
            .load(url)
            .networkPolicy(NetworkPolicy.OFFLINE)
            .into(imageView);

Также проверьте мой предыдущий ответ, возможно, вам помогут: Недействительный кеш в Picasso

Ответ 3

Является OkHttp и Okio present на пути к классу? (или в ваших зависимостях) Поскольку по умолчанию Picasso позволяет HttpClient обрабатывать кеширование (по умолчанию это не делается)

У вас есть 2 варианта

  • включить указанные зависимости (рекомендуется)
  • укажите кеш вручную

Ответ 4

Эта логика работала для меня:

if network is available:
    Picasso.with(context).load(image).into(imageView);
else:
    Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);