2011-06-01 4 views
2

Je souhaite utiliser le cache système d'Android lors du téléchargement d'images conformément aux instructions précédentes: android system cache. J'ai réussi à faire fonctionner le code suivant, mais les instructions du journal me disent que les images ne sont jamais lues dans le cache.Utilisation du cache système d'Android

try { 
    //url = new URL("http://some.url.com/retrieve_image.php?user=" + username); 
    URL url = new URL("http://some.url.com/prof_pics/b4fe7bdfa174ff372c9f26ce6f78f19c.png"); 
    URLConnection connection = url.openConnection(); 
    connection.setUseCaches(true); 
    Object response = connection.getContent(); 
    if (response instanceof Bitmap) { 
     Log.i("CHAT", "this is a bitmap"); 
     current_image.setImageBitmap((Bitmap) response); 
    } 
    else { 
     Log.i("CHAT", "this is not a bitmap"); 
     Log.i("CHAT", response.toString()); 
     InputStream is = connection.getInputStream(); 
     BufferedInputStream bis = new BufferedInputStream(is); 
     current_image.setImageBitmap(BitmapFactory.decodeStream(bis)); 
    } 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

J'ai essayé deux différents types de demandes, on est de passer par un script PHP qui renvoie l'image et une autre qui accède directement le fichier d'image. Je rafraîchis la même image plusieurs fois de suite et il ne semble jamais être mis en cache. Pour l'accès direct des images, je reçois:

05-31 23:45:12.177 I/CHAT (2995): this is not a bitmap 
05-31 23:45:12.177 I/CHAT (2995): org.apache.har[email protected]40c1c660` 

Pour l'accès aux images indirecte, je reçois constamment:

05-31 23:45:14.550 I/CHAT (2995): this is not a bitmap 
05-31 23:45:14.550 I/CHAT (2995): org.apache[email protected]40c02448 

Répondre

4

J'ai trouvé une meilleure façon de le faire. Si quelqu'un d'autre a des problèmes après avoir suivi le lien android system cache, utilisez plutôt ce Google developer's blog post. Le code source de ce blog est conçu pour un ListView mais je l'utilise pour toutes les recherches d'images. Il télécharge l'image dans un AsyncTask, place une image temporaire lors du téléchargement et possède un cache d'image. Cette dernière partie est répertoriée en tant que "Future Item" dans le blog, mais si vous téléchargez le code source, le cache est implémenté. J'ai dû modifier légèrement le code car AndroidHttpClient n'est pas supporté par 2.1. Je l'ai changé pour une connexion URL. Jusqu'à présent, cela semble être une grande classe de téléchargement d'images. Espérons simplement que cela n'affecte pas nos problèmes de gestion de la mémoire déjà difficiles.

+0

Bonne aide, merci d'avoir signalé cet article! –

Questions connexes