繁体   English   中英

从URL加载图像-Java

[英]Load image from URL - Java

我正在尝试从发出GET请求的ASYNC任务的handelResponse中的URL加载图像,并且在handelResponse我有这个

 InputStream is = (InputStream) new URL(homeScreenPicUrl).getContent();
 b = BitmapFactory.decodeStream(is);

但是我的ASYNC任务似乎与此有问题,因为我得到W/System.err﹕ android.os.NetworkOnMainThreadException我该如何将图像加载到hadelResponse ,理想情况下我想同步加载它,因为我想等待它请先加载,然后再转到下一个屏幕。

而且由于这都是在初始屏幕上发生的,所以我只是在等待图片,然后再转到主页。

谢谢

这是因为InputStream只是一个处理程序:当您从中read()BitmapFactory所做的事情)时,实际上是从网络中获取数据,而Android则禁止这样做,因为这会降低系统速度。

您要么在后台线程中解码流,然后将AsyncTask的返回类型更改为Bitmap ,要么将流的内容存储在byte[]然后使用该byte[]在UI线程中构建图像。 这两种解决方案是等效的,因为您正在后台线程中使用流并将其内容存储在内存中。

public byte[] consume(InputStream in) throws Exception {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  byte[] buffer = new byte[2048];
  int read = -1;
  while ((read = in.read(buffer)) > 0) {
    out.write(buffer, 0, read);
  }
  return out.toByteArray();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM