Comment puis-je cache les images après leur téléchargement depuis le web ?
Réponses
Trop de publicités?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.
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:
(J'aimerais l'afficher dans un commentaire, mais j'ai n'ont apparemment pas assez pour le karma.)
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.
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" />
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:
Voici la description complète de droidfu et WebImageView: http://brainflush.wordpress.com/2009/11/23/droid-fu-part-2-webimageview-and-webgalleryadapter/