android - studio - Cargar imágenes desde el caché de disco con Picasso si está desconectado
para que sirve la libreria picasso en android studio (5)
Tengo algunas imágenes que descargo de diferentes sitios web cuando se inicia la aplicación al hacer esto:
Picasso.with(context).load(image_url).fetch();
Ahora, supongamos que el usuario cierra la aplicación y se desconecta. Cuando la aplicación se inicia de nuevo, Picasso muestra las imágenes de esta manera:
Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
El problema es que algunas imágenes se cargan desde el caché del disco (triángulo amarillo en el modo de depuración), y para las demás, Picasso muestra el marcador de posición.
¿Por qué? Estoy esperando que todas las imágenes se carguen desde el caché de disco.
¿ OkHttp y Okio presentes en la ruta de clases? (o en sus dependencias) porque, de forma predeterminada, Picasso permite que HttpClient maneje el almacenamiento en caché (no lo hace de forma predeterminada)
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);
Para evitar la creación de una instancia separada de RequestCreator
como aquí , haga esto:
RequestCreator request = mPicasso.load(TextUtils.isEmpty(imageUrl) ? null : imageUrl)
.placeholder(R.drawable.ic_default)
.error(R.drawable.ic_default)
.transform(transformations)
.noFade()
.centerCrop();
request
.networkPolicy(NetworkPolicy.OFFLINE)
.into(mImageView, new Callback.EmptyCallback(){
@Override
public void onError() {
super.onError();
request.into(mImageView);
}
});
Puede usar este código con esta estrategia. Picasso buscará imágenes en la memoria caché y, si falla, la imagen se descargará 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 verifique mi respuesta anterior, tal vez le ayude: Invalidar el caché en Picasso