2010-06-19 4 views

Répondre

19

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.

+0

C'est tellement mieux ... merci pour le pourboire! – Cristian

+0

Avez-vous testé cela? Ça ne semble pas fonctionner ici. –

+0

Non, cela ne fonctionne pas. – alexanderblom

6

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.

+0

sauriez-vous comment faire cela dans une connexion https? – Woppi

6

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> 
* 
*/ 

Liens de commentaires ci-dessus: Link 1 Link 2

6

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 ...

Questions connexes