Загрузка удаленных изображений - PullRequest
11 голосов
/ 19 июня 2010

В Android самый простой подход к следующему:

  1. Загрузка изображения с удаленного сервера.
  2. Отображение в ImageView.

Ответы [ 5 ]

20 голосов
/ 19 июня 2010

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

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", кажется, работает Если кто-нибудь знает, пожалуйста, пролите немного света, так как документы на самом деле ничего не говорят об этом.

6 голосов
/ 30 октября 2012

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

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

6 голосов
/ 29 июня 2010

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

final Bitmap bm = BitmapFactory.decodeStream(bis);

и

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

Ответ Феликса поймает его в выражении catch {}, и вы могли бы что-то с этим сделать

Вот как обойти ошибку 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="/376948/problema-s-nehvatkoi-pamyati-pri-zagruzke-izobrazheniya-v-rastrovyi-obekt#376958">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>
 * 
 */

Ссылки сверху комментариев: Ссылка 1 Ссылка 2

6 голосов
/ 19 июня 2010

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

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 голосов
/ 03 июля 2019

Это просто:

Добавьте эту зависимость в ваш скрипт gradle:

implementation 'com.squareup.picasso:picasso:2.71828'

* 2.71828 - текущая версия

Затем сделайте это для просмотра изображения:

Picasso.get().load(pictureURL).into(imageView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...