2010-06-19 2 views

ответ

19

Вот метод, который я использовал в приложении, и я знаю, что это работает:

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 
} 

Я понятия не имею, что второй параметр Drawable.createFromStream есть, но проходя "src", кажется, работает. Если кто-то знает, прошу пролить свет, так как документы на самом деле ничего не говорят об этом.

+0

Это намного лучше ... спасибо за подсказку! – Cristian

+0

Вы протестировали это? Кажется, здесь не работает. –

+0

Нет, это не работает. – alexanderblom

6

Самый простой способ до сих пор построить простой Ретривер изображения:

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; 
} 

Затем вы просто должны предоставить URL в метод, и он будет возвращает Bitmap. Затем вам нужно будет использовать метод setImageBitmap от ImageView, чтобы показать изображение.

+0

вы знаете, как это сделать в связи с HTTPS? – Woppi

6

Будьте осторожны с обоими ответами здесь - они оба имеют шанс на OutOfMemoryException. Проверьте свое приложение, пытаясь загрузить большое изображение, например обои для рабочего стола. Чтобы было ясно, что обижая линии:

final Bitmap bm = BitmapFactory.decodeStream(bis);

и

Drawable thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src");

ответ Феликса будет поймать его в заявлении поймать {}, и вы могли бы сделать что-то о нем.

Вот как работать вокруг 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 
    } 

А вот мои комментарии по этому поводу в своем коде

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

Ссылки с комментариями выше: Link 1 Link 2

6

Вы также можете попробовать эту библиотеку: https://github.com/codingfingers/fastimage

Когда мы были несколько проектов с той же схемой, и Lib придумал;) так почему бы не поделиться с другими ...

Смежные вопросы