web-dev-qa-db-fra.com

Android Picasso Image ne se charge pas

Il existe deux situations dans lesquelles je charge des images, tout d’abord directement depuis Internet, et deuxièmement, les images téléchargées sur l’appareil. Et chaque fois que je charge, 8 ~ 9 images sur 10 sont affichées et 1 ou 2 sont manquantes. Je vois que le décodage est retourné faux, et que Google l'a fait aussi fort que je peux, mais qu'il n'a pas pu arriver. 

  1. WAIT_FOR_CONCURRENT_GC bloqué 22ms
  2. WAIT_FOR_CONCURRENT_GC bloqué 20ms
  3. GC_FOR_ALLOC libéré 718K, 31% libre 9948K/14256K, mis en pause 49 ms, total 51 ms
  4. D/skia: --- decoder-> decode a retourné falseGC_CONCURRENT libéré 1370K, 30% libre 10081K/14256K, mis en pause 3 ms + 2 ms, total 33 ms
  5. GC_FOR_ALLOC libéré 916K, 30% gratuit 10029K/14256K, mis en pause 66 ms, total 67 ms

Voici le code que j'utilise pour charger via Picasso:

        Picasso.with(activity)
            .load(path)
            .placeholder(R.drawable.thumbnail_placeholder)
            .resize(width,height)
            .into(imageView);

Des idées comment résoudre ce problème? J'appelle fit ()/resize () chaque fois que je reçois les images à charger sur l'écran. Aide très appréciée, merci d'avance!

Pour votre information, je teste sur les deux machines, l'émulateur et le périphérique réel, le Samsung Galaxy Tab 3, et fonctionne sans problème sur l'émulateur, mais des problèmes surviennent sur le périphérique réel.

METTRE À JOUR:

Cela était dû à l’espace colorimétrique de l’image, où les images qui ne se présentaient pas étaient celles qui se trouvaient dans l’espace colorimétrique YMCK. 

7
xosuma

Vous pouvez activer les journaux Picasso en utilisant Picasso.with(Context).setLoggingEnabled(true). Vous verrez probablement un message d'erreur avec une raison.

Il est également intéressant de noter l'URL que vous utilisez et de l'essayer avec un navigateur, au cas où.

22
Matthew Shearer

vérifier la permission Internet dans manifaest

<uses-permission Android:name="Android.permission.INTERNET"/>
10
Tarun Umath

Dans Picasso, vous devez passer url dans la méthode .load() pour charger une image à partir d'Internet et un objet de type File pour charger une image à partir du stockage de l'appareil.

Donc, si l'image est stockée sur l'appareil, chargez-la comme ceci:

        Picasso.with(activity)
                .load(new File(path))
                .placeholder(R.drawable.thumbnail_placeholder)
                .resize(width,height)
                .into(imageView);

Et utilisez ce code pour charger une image sur Internet:

        Picasso.with(activity)
                .load(path)
                .placeholder(R.drawable.thumbnail_placeholder)
                .resize(width,height)
                .into(imageView);
5
dzikovskyy

Je ne sais pas si c'est pertinent ou non, mais mon problème est résolu en utilisant Glide au lieu de Picasso.

2
Gentle

Jetez un oeil sur Picasso: mémoire insuffisante

Vérifiez que vous utilisez une taille fixe dans votre ImageView, référez-vous à plus d’informations à @Samuil Yanovski answer

J'espère que cela t'aides!!

1
Gueorgui Obregon

Si quelque chose ne fonctionne pas, c'est à cause d'un problème avec les serveurs hébergeant des images, leur URL ne vous conduit pas directement à l'image, mais quelque chose d'autre fonctionne en arrière-plan, il peut s'ouvrir en chrome ou dans un autre navigateur, mais pas bien sûr, dans picasso, il se chargera, vous pouvez donc essayer ce code: 

final OkHttpClient client = new OkHttpClient.Builder()
        .protocols(Collections.singletonList(Protocol.HTTP_1_1))
        .build();

final Picasso picasso = new Picasso.Builder(this)
        .downloader(new OkHttp3Downloader(client))
        .build();

Picasso.setSingletonInstance(picasso);

où l'instance OkHttp3Downloader est fournie par cette bibliothèque . https://github.com/JakeWharton/picasso2-okhttp3-downloader

0
Shreyansh jain