Je joue avec la bibliothèque Picasso pour le chargement d'images, mais je rencontre un problème. Lorsqu'une image ne parvient pas à se charger, je souhaite masquer la vue plutôt que de la charger dans une image par défaut. J'ai remarqué de la source qu'il semble que le seul moyen d'ajouter un écouteur soit à partir du générateur, mais la méthode d'erreur n'est jamais appelée lorsqu'une image ne parvient pas à se charger. Quelqu'un a-t-il une expérience avec ceci?
iv = (ImageView) findViewById(R.id.imageView);
Picasso.Builder builder = new Picasso.Builder(getApplicationContext());
builder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso arg0, String arg1) {
Log.e("Picasso Error", "Errored out, hiding view");
iv.setVisibility(View.GONE);
}
});
Picasso pic = builder.build();
pic.load("thisshouldbreak.jpg").into(iv);
Picasso 2.0 vous permet de joindre un rappel à une demande.
https://github.com/square/picasso
Le rappel que vous utilisez est pour l'écouteur "global" et il vous aide à déboguer les erreurs qui peuvent se produire en raison d'une charge réseau.
Utilisez load(url).into(view, new Callback() {...});
dans Picasso 2.0.
N'oubliez pas d'appeler cancelRequest(target)
si vous utilisez un Callback
.
Mon exemple:
Picasso picasso = new Picasso.Builder(parent.getContext())
.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
//Here your log
}
})
.build();
picasso.load(shopModel.getShopImg())
.fit()
.into(viewHolder.shopImg);
Vous pouvez essayer d'ajouter un écouteur "global".
// create Picasso.Builder object
Picasso.Builder picassoBuilder = new Picasso.Builder(this);
picassoBuilder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
Log.e("PICASSO", uri.toString(), exception);
}
});
// Picasso.Builder creates the Picasso object to do the actual requests
Picasso picasso = picassoBuilder.build();
try {
Picasso.setSingletonInstance(picasso);
} catch (IllegalStateException ignored) {
// Picasso instance was already set
// cannot set it after Picasso.with(Context) was already in use
}
Tout appel ultérieur à Picasso.with(Context context)
renverra l'instance qui s'est connectée à l'écouteur, donc tous les échecs seront enregistrés.
Veuillez noter que vous devez appeler setSingletonInstance
dès que possible, par exemple dans Application onCreate
.
P.S. Code adopté d'ici - Personnalisation de Picasso avec Picasso.Builder
Ma réponse:
File file = new File(filePath);
Picasso.with(context).load(file).placeholder(R.drawable.draw_detailed_view_display).error(R.drawable.draw_detailed_view_display)
.resize(400, 400).into(mImageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
mImageView.setVisibility(View.GONE);
}
});
Lorsque nous avons une erreur, l'erreur va à la méthode onError puis nous la gérons!
private void getAvatar(){
Picasso.with(this)
.load(Links.GET_AVATAR + ".jpg")
.into(imgUserAvatar, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
imgUserAvatar.setImageResource(R.drawable.icon_profile_default);
}
});
}
Juste une suggestion, mais vous pourriez éviter des problèmes de programmation si vous créez un fichier png "vide" et le définissez comme fichier image par défaut dans votre dossier res ... un peu idiot je sais ... mais il est probable qu'il fonctionnera sans se battre .. .