使用uri(android.net.uri)作为链接从Internet获取图像并将其放在ImageView中

时间:2016-01-11 22:39:26

标签: android android-imageview android-viewholder

我有一个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

我认为问题是网址定义中的问题,但我会问你是否有人有同样的问题以及你是如何解决的。提前谢谢!

2 个答案:

答案 0 :(得分:0)

为此,请尝试使用特定的图片库,例如PicassoGlideFresco。第一个是最简单的,具有良好的流畅界面,它可以非常快速地加载图像:

请检查,因为您可能不知道。以下是其官方网站(以下链接)的简短描述:

  

图片为Android添加了急需的上下文和视觉风格   应用。毕加索允许你的无忧图像加载   应用程序 - 通常在一行代码中!

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
     

处理Android上图像加载的许多常见缺陷   由毕加索自动完成:

     
      
  • 在适配器中处理ImageView回收和下载取消。
  •   
  • 复杂的图像转换,内存使用最少。
  •   
  • 自动内存和磁盘缓存。
  •   
     

来自:http://square.github.io/picasso/

由于它已经是开源项目,您可以检查代码以改进它或使您自己的版本符合您的实际需求。

希望有所帮助

答案 1 :(得分:0)

很有可能url = new URL(item.getImage().toString());正在抛出MalformedURLException,你的捕获块会抑制它。因此,url为空,这就是您获得NullPointerException的原因。构造函数不能返回null,所以这是我唯一可以想象的。

除非你真的知道自己在做什么,否则我建议您使用像Glide这样的库来进行图像提取。