J'ai quelques images que je télécharge depuis différents sites Web lorsque l'application démarre, en procédant comme suit:
Picasso.with(context).load(image_url).fetch();
Supposons maintenant que l'utilisateur ferme l'application et se déconnecte. Lorsque l'application redémarre, Picasso affiche les images de la manière suivante:
Picasso.with(ctx).load(image_url).placeholder(R.drawable.ph).into(imageView);
Le problème est que certaines images sont chargées à partir du cache disque (triangle jaune en mode débogage), et pour les autres, Picasso affiche l’espace réservé.
Pourquoi? Je m'attends à ce que chaque image soit chargée à partir du cache disque.
Vous pouvez utiliser ce code avec cette stratégie. Picasso recherchera les images en mémoire cache et si elle échoue uniquement, elle sera téléchargée sur le réseau.
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);
}
});
Faites ceci:
Picasso.with(this)
.load(url)
.networkPolicy(NetworkPolicy.OFFLINE)
.into(imageView);
Vérifiez également ma réponse précédente, peut-être vous aidera-t-il: Invalider le cache dans Picasso
Cette logique a fonctionné pour moi:
if network is available:
Picasso.with(context).load(image).into(imageView);
else:
Picasso.with(context).load(image).networkPolicy(NetworkPolicy.OFFLINE).into(imageView);
Pour éviter de créer des instances séparées de RequestCreator
comme ici , procédez comme suit:
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);
}
});