web-dev-qa-db-fra.com

Bibliothèque Picasso, Android: utilisation du programme d'écoute d'erreur

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);
24
Paul Ruiz

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.

52
dnkoutso

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);
17
Kostiantyn Matsko

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

5
Anton Malmygin

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);
            }
        });
4
TVT. Jake

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);
                    }
                });
}
2
Hadi Note

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 .. .

1
me_