У меня есть некоторые изображения, которые я загружаю с разных веб-сайтов при запуске приложения, делая это:
Picasso.with(context).load(image_url).fetch();
Теперь предположим, что пользователь закрывает приложение и отключается. Когда приложение запускается снова, Picasso отображает изображения таким образом:
Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
Проблема в том, что некоторые изображения загружаются из кеша диска (желтый треугольник в режиме отладки), а для остальных 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);