加载远程图像

时间:2010-06-19 13:25:59

标签: android image imageview

在Android中,以下最简单的方法是什么:

  1. 从远程服务器加载图像。
  2. 在ImageView中显示。

5 个答案:

答案 0 :(得分:20)

这是我在应用程序中实际使用的方法,我知道它有效:

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"似乎有效。如果有人知道,请说清楚,因为文档并没有真正说出任何关于它的内容。

答案 1 :(得分: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。然后,您只需使用ImageView中的setImageBitmap方法来显示图片。

答案 2 :(得分:6)

请注意这里的两个答案 - 它们都有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="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

答案 3 :(得分:6)

你也可以尝试这个lib: https://github.com/codingfingers/fastimage

当我们有很少的项目具有相同的模式,并且lib出现了;)那么为什么不与他人分享......

答案 4 :(得分:0)

这很简单:

在您的gradle脚本中添加此依赖项:

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

* 2.71828是当前版本

然后对图像视图执行此操作:

Picasso.get().load(pictureURL).into(imageView);