143 votes

Mise en cache d'images Android

Comment puis-je cache les images après leur téléchargement depuis le web ?

178voto

edrowland Points 1459

Et maintenant, le punchline: utilisez le cache système.

 URL url = new URL(strUrl);
URLConnection connection = url.openConnection();
connection.setUseCaches(true);
Object response = connection.getContent();
if (response instanceof Bitmap) {
  Bitmap bitmap = (Bitmap)response;
} 
 

Fournit à la fois de la mémoire et du cache Flash-ROM, partagés avec le navigateur.

grr. J'aimerais que quelqu'un m'ait dit qu'avant d'écrire mon propre gestionnaire de cache.

65voto

Joe Points 681

Concernant l'élégant connection.setUseCaches solution ci-dessus: malheureusement, il ne fonctionne pas sans quelques efforts supplémentaires. Vous aurez besoin d'installer un ResponseCache l'aide ResponseCache.setDefault. Sinon, HttpURLConnection silencieusement ignorer l' setUseCaches(true) bits.

Voir le commentaire en haut de l' FileResponseCache.java pour les détails:

http://libs-for-android.googlecode.com/svn/reference/com/google/android/filecache/FileResponseCache.html

(J'aimerais l'afficher dans un commentaire, mais j'ai n'ont apparemment pas assez pour le karma.)

28voto

Samuh Points 16564

Les convertir en images bitmap, puis de les stocker dans une Collection(HashMap,Liste, etc.) ou vous pouvez les écrire sur la carte sd.

Lors de leur stockage dans l'espace des applications à l'aide de la première approche, vous pouvez les envelopper autour de java.lang.réf.SoftReference spécifiquement si leur nombre est grand (de sorte qu'ils sont des ordures collectées pendant la crise). Cela pourrait s'ensuivre un Rechargement.

HashMap<String,SoftReference<Bitmap>> imageCache =
    	new HashMap<String,SoftReference<Bitmap>>();

écrire sur SDcard n'aurez pas besoin de Recharger, il suffit d'un utilisateur l'autorisation.

18voto

Laurence Dawson Points 4837

Pour télécharger une image et enregistrer sur la carte mémoire, vous pouvez le faire comme ceci.

 //First create a new URL object 
URL url = new URL("http://www.google.co.uk/logos/holiday09_2.gif")

//Next create a file, the example below will save to the SDCARD using JPEG format
File file = new File("/sdcard/example.jpg");

//Next create a Bitmap object and download the image to bitmap
Bitmap bitmap = BitmapFactory.decodeStream(url.openStream());

//Finally compress the bitmap, saving to the file previously created
bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream(file));
 

N'oubliez pas d'ajouter l'autorisation Internet à votre manifeste:

 <uses-permission android:name="android.permission.INTERNET" />
 

13voto

esilver Points 7768

Je voudrais envisager d'utiliser droidfu de l'image cache. Il met en œuvre à la fois une mémoire et un disque d'images en fonction de cache. Vous bénéficiez également d'un WebImageView qui tire parti de la ImageCache de la bibliothèque.

Voici la ImageCache code de bibliothèque en particulier:

http://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/imageloader/ImageCache.java

Voici la description complète de droidfu et WebImageView: http://brainflush.wordpress.com/2009/11/23/droid-fu-part-2-webimageview-and-webgalleryadapter/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X