Cargar imágenes de la caché de disco con Picasso si está fuera de línea
Tengo algunas imágenes que descargo de diferentes sitios web cuando se inicia la aplicación, haciendo esto:
Picasso.with(context).load(image_url).fetch();
Ahora, supongamos que el usuario cierra la aplicación y se desactiva. Cuando la aplicación se inicia de nuevo, Picasso muestra las imágenes de esta manera:
- Picasso no puede cargar imagen dentro del método onSuccess de StorageReference
- Cómo cargar un mapa de bits con Picasso sin usar un ImageView?
- Android Picasso - Marcador de posición y estilo de imagen de error
- Cargando varias imágenes con Picasso en el fondo
- "No se pueden dibujar mapas de bits reciclados" con Picasso
Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
El problema es que algunas imágenes se cargan desde la caché del disco (triángulo amarillo en el modo de depuración), y para los otros Picasso muestra el marcador de posición.
¿Por qué? Estoy esperando que cada imagen se carga desde la caché de disco.
- ¿Podría ocultar la barra de progreso después de cargar la imagen en picasso?
- ¿Cómo acceder a Drawable cuando se utiliza Picasso?
- Picasso no conserva la proporción de aspecto al cambiar el tamaño de la imagen
- Picasso caché con diferentes transformaciones aplicadas
- ¿Es posible descargar imágenes de la memoria caché en picasso?
- Borrar memoria caché de Picasso
- Android: falla en la imagen de carga de Picasso. Cómo mostrar mensaje de error
- Picasso no puede cargar imágenes grandes (de la cámara y Uri local)
Puedes usar este código por esta estrategia Picasso buscará imágenes en caché y si falló sólo entonces la imagen será descargada a través de la red.
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); } });
Hacer esto:
Picasso.with(this) .load(url) .networkPolicy(NetworkPolicy.OFFLINE) .into(imageView);
También compruebe mi respuesta anterior, tal vez le ayudará: Invalidar caché en Picasso
OkHttp y Okio están presentes en el camino de clase? (O en sus dependencias) Debido a que por defecto Picasso permite al HttpClient manejar el almacenamiento en caché (no lo hace por defecto)
Tienes 2 opciones
- Incluir las dependencias mencionadas (recomendado)
- Especifique el caché manualmente
Esta lógica funcionó para mí:
if network is available: Picasso.with(context).load(image).into(imageView); else: Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);