web-dev-qa-db-fra.com

Pourquoi utiliser Android la bibliothèque Picasso pour télécharger des images?

Pourquoi devrais-je télécharger les images via la bibliothèque Picasso au lieu d'utiliser simplement ce code:

private Bitmap DownloadImage(String URL) 
{
    Bitmap bitmap = null; 
    InputStream in = null; 

    try 
    {
        in = OpenHttpGETConnection(URL);
        bitmap = BitmapFactory.decodeStream(in); in.close();
    } 
    catch (Exception e) 
    {
        Log.d("DownloadImage", e.getLocalizedMessage());
    }

    return bitmap; 
}

Une autre question:

Picasso télécharge-t-il l'image dans l'interface utilisateur ou par un fil de fond?

43
user3376321

Pour mémoire, si vous êtes un nouvel utilisateur de Android ou passez peut-être à Android à partir de iOS ..........

Jusqu'à ce que quelque chose change radicalement, vous devez absolument utiliser Picasso. Pas une blague.

Honnêtement, c'est aussi simple que cela. Les avantages sont incroyables.

C'est aussi simple à utiliser:

Picasso.
  with(State.mainContext).
  load(parseImageFile.getUrl()).
  into(null);

Vous très simplement:

doit faire la mise en cache, et threading, avec la gestion des images sur Android.

C'est si simple. Sauf si vous voulez écrire cela à partir de zéro , vous devez simplement utiliser Picasso.

Notez que ParseImageFile ne fonctionne pas - il est absolument inutile de mettre en cache, etc. Il existe d’excellentes alternatives à Picasso (telles que Universal Image Loader, à découvrir), mais aucune ne fonctionne aussi bien que Picasso, pour l’instant 2014.

Remarque si vous passez à des articles super-avancés ... La seule chose est meilleure que Picasso, est de passer à Volley. mais c'est un énorme saut.

Notez que le défilement ListView sur Android est beaucoup plus problématique que le défilement de la table sur iOS. Vous pourriez dire, Android + Picasso est plus semblable à la situation sur iOS, où tout le travail est déjà fait pour faire défiler des vues de tableau volumineuses avec des images.

Pour aujourd’hui, Picasso est - tout simplement - une partie centrale de toute Android). Heureusement, c’est une ligne de code - pas d’installation, rien.

Encore une fois, la seule chose "meilleure que" Picasso est si vous passez à Volley.

BTW voici un excellent long article sur Volley v. Picasso, si vous en avez besoin ...

http://www.bignerdranch.com/blog/solving-the-Android-image-loading-problem-volley-vs-picasso/

99
Fattie

Picasso télécharge l'image dans un autre fil et il gère pour vous:

  • l'espace réservé pendant le téléchargement de l'image
  • redimensionnement
  • recadrage/centrage/mise à l'échelle
  • la mise en cache (il n'est pas nécessaire de télécharger l'image à chaque fois)
  • il fait même "fondu dans l'image", qui est populaire/normal maintenant

C'est extrêmement simple, voici un exemple:

    Picasso.with(context)
           .load(url)
           .placeholder(R.drawable.placeholder)
           .resize(imgWidth, imgHeight)
           .centerCrop()
           .into(image);
35
Sarpe

J'ai toujours utilisé Bibliothèque Picasso pour les images.
C'est très utile pour gérer les images et ne vous inquiétez pas du problème de mémoire.
Quand je télécharge des images depuis un serveur ou un json, j’utilisais

 Picasso.with(context).load("image url").fetch();

Et je stocke cette image URL à la base de données ou quelque part.
Nous pouvons maintenant utiliser cette image n'importe où (hors ligne également).

Picasso.with(context).load("image url").into(ImageView);
12
Kglay Kophyo
Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView,
  new Callback() {@
    Override
    public void onSuccess() {}@
    Override
    public void onError() {}
  });

Vous devez télécharger les images via la bibliothèque Picasso pour les raisons suivantes:

  1. Vous pouvez mettre un espace réservé au cas où l'image prend un peu de temps à charger.
  2. fit() - parfois, certaines images ne se chargent pas en mode d'affichage en raison de la taille. Cette méthode vous aidera à charger de grandes images.
  3. onSuccess() - vous pouvez effectuer certaines actions lorsqu'une image est chargée avec succès.
  4. onError() - vous pouvez effectuer certaines actions en cas de problème de chargement d'une image.
5
Rajat

Je sais que Picasso est une bibliothèque géniale pour la gestion des images dans ListView et GridView, mais parmi toutes les options, y compris Picasso, j'utilise GLIDE ...

Il gère vraiment le téléchargement et la mise en cache parfaitement ... (je ne pouvais pas amener Picasso à utiliser les images en cache une fois le téléchargement terminé, mais Glide l’a fait comme un morceau de gâteau).

Voici la page Github de GLIDE:

https://github.com/bumptech/glide

Cordialement....

2
Arash Parsayar

Vous devez utiliser une bibliothèque d'Image Loader telle que Picasso, Volley ou Universal Image Loader, car elles font les choses suivantes que votre code ne fait pas:

  • Mise en réseau efficace multithread (sur les threads d'arrière-plan bien sûr)
  • Combinaison de plusieurs demandes identiques en un seul appel réseau
  • Annulation des demandes en attente, en particulier lors du recyclage d'éléments ListView
  • Mise en cache de disque et de mémoire avec différentes stratégies d'expiration
  • Le sous-échantillonnage des images à la taille de la vue cible améliore les performances et réduit l'utilisation de la mémoire
  • Traitement en lots des mises à jour de l'interface utilisateur pour améliorer la réactivité de l'interface utilisateur (du moins pour Volley et Picasso).

En passant, vous ne devez jamais effectuer de requêtes réseau sur le thread d'interface utilisateur et depuis HoneyComb, Android ne vous le permet pas.

2
BladeCoder

Si vous utilisiez la méthode principale de chargement d'image à partir d'un réseau, cela nécessiterait une plus grande quantité de code. Mais si nous utilisons une bibliothèque tierce telle que picasso, nous atteindrons notre objectif en quelques lignes de code.
Et la bibliothèque Picasso est la meilleure et la plus simple que j'ai trouvée jusqu'à présent. Il suffit d’écrire ce qui suit pour charger une image depuis Internet en utilisant picasso.

Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading
.error(Your Drawable Resource)         //this is also optional if some error has occurred in downloading the image this image would be displayed
.into(imageView);

Mais si nous n'utilisons pas la bibliothèque picasso ou une autre bibliothèque, nous aurons peut-être besoin de le faire en utilisant AsyncTask qui nécessitera plus de lignes de code.

Source: Picasso Android Didacticiel

2
Amrah Anam

S'il vous plaît ajouter la dépendance suivante dans votre build.gradle(Module:app)

compile 'com.github.bumptech.glide:glide:3.6.1'
0
nikhil

Picasso gère automatiquement tous les pièges associés au téléchargement d'images, tels que la mise en cache de l'image téléchargée, la recherche de mémoire cache, l'annulation d'une demande existante, l'exécution de transormations d'image et le décodage, le redimensionnement et le recadrage des images.

Et cela vous permet de le personnaliser, vous pouvez configurer la mémoire pour le cache, ajouter un transformateur de requête utilisé pour ajouter des informations globales à chaque requête, ajouter une configuration bitmap pour gérer le décodage d'images au format non couvert par la configuration bitmap par défaut.

Il vous permet de spécifier une politique de mémoire et une stratégie de réseau, ce qui permet d'utiliser le cache ou de télécharger à partir du réseau. Il vous permet d'ajouter des images de marque de réservation et d'erreur à utiliser lors du téléchargement et en cas d'erreur lors du téléchargement.

Picasso télécharge les images de manière asynchrone sur les threads de travail.

Voici le code utilisant la dernière version 2.71828 de Picasso pour charger une image dans ImageView sur un thread de travail.

Picasso.get().load(productImageUrl).into(imageView);

Le code ci-dessous redimensionne et recadre l'image.

Voir http://www.zoftino.com/Android-picasso-image-downloading-and-caching-library-tutorial pour plus d'informations. Picasso.get (). Load (productImageUrl) .resize (400 400) .centerCrop (). Into (imageView);

0
Arnav Rao