Dans Android, quelle est la méthode la plus simple à ce qui suit:Chargement des images à distance
- Charger une image à partir d'un serveur distant.
- L'afficher dans un ImageView.
Dans Android, quelle est la méthode la plus simple à ce qui suit:Chargement des images à distance
Voici une méthode que j'ai utilisé dans une application et je sais que cela fonctionne:
try {
URL thumb_u = new URL("http://www.example.com/image.jpg");
Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
myImageView.setImageDrawable(thumb_d);
}
catch (Exception e) {
// handle it
}
Je ne sais pas ce que le second paramètre à Drawable.createFromStream
est, mais passant "src"
semble fonctionner. Si quelqu'un le sait, s'il vous plaît faites la lumière, car les docs ne disent rien à ce sujet.
La façon la plus simple à ce jour est de construire une image simple retriver:
public Bitmap getRemoteImage(final URL aURL) {
try {
final URLConnection conn = aURL.openConnection();
conn.connect();
final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
final Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
return bm;
} catch (IOException e) {}
return null;
}
Ensuite, il vous suffit de fournir une URL à la méthode et on retourne une Bitmap
. Ensuite, il vous suffira d'utiliser la méthode setImageBitmap
de ImageView
pour afficher l'image.
sauriez-vous comment faire cela dans une connexion https? – Woppi
Soyez prudent avec les deux réponses ici - ils courent tous deux la chance d'un OutOfMemoryException
. Testez votre application en essayant de télécharger une grande image, telle qu'un fond d'écran. Pour être clair, les lignes incriminées sont les suivantes: déclaration
final Bitmap bm = BitmapFactory.decodeStream(bis);
et
Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");
réponse de Felix va attraper dans le catch {}, et vous pourriez faire quelque chose là-bas.
Voici comment contourner l'erreur OutOfMemoryException
:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap bmp = null;
try {
bmp = BitmapFactory.decodeStream(is, null, options);
} catch (OutOfMemoryError ome) {
// TODO - return default image or put this in a loop,
// and continue increasing the inSampleSize until we don't
// run out of memory
}
Et voici mes commentaires à ce sujet dans mon code
/**
* Showing a full-resolution preview is a fast-track to an
* OutOfMemoryException. Therefore, we downsample the preview image. Android
* docs recommend using a power of 2 to downsample
*
* @see <a
* href="https://stackoverflow.com/questions/477572/android-strange-out-of-memory-issue/823966#823966">StackOverflow
* post discussing OutOfMemoryException</a>
* @see <a
* href="http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize">Android
* docs explaining BitmapFactory.Options#inSampleSize</a>
*
*/
Vous pouvez également essayer cette lib: https://github.com/codingfingers/fastimage
Lorsque nous avons eu quelques projets avec le même modèle, et la lib est apparue;) alors pourquoi ne pas partager avec d'autres ...
C'est tellement mieux ... merci pour le pourboire! – Cristian
Avez-vous testé cela? Ça ne semble pas fonctionner ici. –
Non, cela ne fonctionne pas. – alexanderblom