我想从" http://i.imgur.com /4GLKF4Q.jpg"向ImageView显示图片。但图像URL中的图像没有显示到imageview。我可以这样做吗?
的AsyncTask
class DownloadImageTask extends AsyncTask<String, Void, byte[]> {
ImageView bmImage;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected byte[] doInBackground(String... urls) {
try {
URL url = new URL(urls[0]);
InputStream is = (InputStream) url.getContent();
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
while ((bytesRead = is.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
return output.toByteArray();
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
protected void onPostExecute(byte[] result) {
ByteArrayInputStream imageStream = new ByteArrayInputStream(result);
Bitmap bm = BitmapFactory.decodeStream(imageStream);
bmImage.setImageBitmap(bm);
}
}
活动
new DownloadImageTask((ImageView) newView.findViewById(R.id.thumbnail))
.execute("http://i.imgur.com/4GLKF4Q.jpg");
图片网址中的图片未显示给imageview。 在Logcat:
09-23 10:26:49.410 10591-10591/com.*** D/skia: --- SkImageDecoder::Factory returned null
答案 0 :(得分:1)
从评论更新:将图片服务器更改为另一个解决问题。我想这是一个 i.imgur.com 问题。
你不应该使用自己的图像加载器任务,它会泄漏到某个地方。 存在两个好的库: - Fresco(来自Facebook) - Picasso(来自Square up)
还有UniversalImageLoader(UIL)。
答案 1 :(得分:1)
我建议您查看图片管理库(Facebook),Fresco与其他图片加载库相比非常棒且成熟。
< / LI> Fresco使用3层架构(BITMAP_MEMORY_CACHE
,ENCODED_MEMORY_CACHE
和DISK_CACHE
)处理图像的所有缓存。它还减少了OOM(Out Of Memory)问题。当视图中的图像离开屏幕时,它会自动回收位图,从而释放内存。
答案 2 :(得分:0)
现在有一个official way从URL加载ImageView,而不是使用ImageView。
NetworkImageView - 在ImageLoader上构建,有效替换ImageView,以用于通过URL通过网络获取图像的情况。如果视图与层次结构分离,NetworkImageView还管理取消挂起的请求。
图像自动加载到后台线程中,并在UI线程上更新视图。它甚至支持缓存。