我有一个item对象,包含一个名为image的Uri变量。像这样的东西
http://icons.iconarchive.com/icons/designcontest/vintage/256/Type-icon.png
我试图从类方法中获取Uri并使用它在我的viewholder中设置名为Image的ImageView
viewHolder.Image.setImageURI(item.getImage());
但它没有用,所以我尝试了一些更复杂但没有成功的事情
//Image
URL url = null;
try {
url = new URL(item.getImage().toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
Bitmap bmp = null;
try {
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
viewHolder.Image.setImageBitmap(bmp);
} catch (IOException e) {
e.printStackTrace();
}
我已经允许互联网权限,如果我使用Uri.parse本地的一些图像,它的工作没有任何问题。 这是我从logcat
得到的错误 E/AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'java.net.URLConnection java.net.URL.openConnection()' on a null object reference
我认为问题是网址定义中的问题,但我会问你是否有人有同样的问题以及你是如何解决的。提前谢谢!
答案 0 :(得分:0)
为此,请尝试使用特定的图片库,例如Picasso
,Glide
或Fresco
。第一个是最简单的,具有良好的流畅界面,它可以非常快速地加载图像:
请检查,因为您可能不知道。以下是其官方网站(以下链接)的简短描述:
图片为Android添加了急需的上下文和视觉风格 应用。毕加索允许你的无忧图像加载 应用程序 - 通常在一行代码中!
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
处理Android上图像加载的许多常见缺陷 由毕加索自动完成:
- 在适配器中处理ImageView回收和下载取消。
- 复杂的图像转换,内存使用最少。
- 自动内存和磁盘缓存。
由于它已经是开源项目,您可以检查代码以改进它或使您自己的版本符合您的实际需求。
希望有所帮助
答案 1 :(得分:0)
很有可能url = new URL(item.getImage().toString());
正在抛出MalformedURLException
,你的捕获块会抑制它。因此,url
为空,这就是您获得NullPointerException
的原因。构造函数不能返回null,所以这是我唯一可以想象的。
除非你真的知道自己在做什么,否则我建议您使用像Glide这样的库来进行图像提取。