Intereting Posts
Тень панели инструментов в строке состояния для Lollipop Что такое «обновления в ожидании» в Google Developer Console Изменение разрыва ящика между группой заголовков и меню первого элемента ListView с интерактивным / редактируемым виджетами Сертификат RapidSSL не поддерживается на планшете Android Как отладить собственный код в проекте библиотеки Android? Разрешение предоставляется только системному приложению Тестирование диалогов с помощью Robolectric Проблема Butterknife @InjectView после обновления до 7 Создать случайный цвет Java Android Project: как лучше всего организовать файлы Gradle: как включить локальную банку из зависимого Java-проекта в сборке Android? InflateException: двоичная строка XML-файла # 1: ошибка раздувания класса <unknown>, вызванная OutOfMemoryError Android FragmentTabHost: нет закладки, известной для тега null Владелец устройства на Android 5.0 (и другие) без корневых устройств, предоставление устройств NFC

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

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

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

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

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

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

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

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

Вы можете использовать этот код в соответствии с этой стратегией. 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); } }); 

Сделай это:

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

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

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

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

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

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

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