2010-09-10 85 views
9

我想使ImageView在网站上显示图像。因此,我创建了一个新的ImageView并执行imgView.setImageURI(uri);设置Uri时出现错误的位图错误

当我启动应用程序时,图像不出现,并且出现错误“resolveUri在坏Bitmap Uri(uri)上失败”。

关于如何解决这个问题的任何想法?

回答

17

如果它不是内容URI,this link可能会有所帮助。似乎表明imgView.setImageURI()不应用于常规URI。在相关位中复制:

是的,ImageView.setImageURI(ContentURI uri)适用,但它适用于Android平台特有的内容URI,而不是指定Internet资源的URI。该约定适用于不能通过ContentProvider的Cursor方法直接公开的二元对象(例如图像)。相反,String引用用于引用不同的内容URI,可以通过针对内容提供者的单独查询来解析该内容URI。 setImageURI方法仅仅是为你执行这些步骤的一个包装。

我测试了setImageView的这种用法,并且它按预期工作。不过,对于您的使用,我会看看BitmapFactory.decodeStream()URL.openStream()

还要使这个答案自成体系,从另一个帖子在该链接的代码示例,展示了如何做到这一点:

private Bitmap getImageBitmap(String url) { 
    Bitmap bm = null; 
    try { 
     URL aURL = new URL(url); 
     URLConnection conn = aURL.openConnection(); 
     conn.connect(); 
     InputStream is = conn.getInputStream(); 
     BufferedInputStream bis = new BufferedInputStream(is); 
     bm = BitmapFactory.decodeStream(bis); 
     bis.close(); 
     is.close(); 
    } catch (IOException e) { 
     Log.e(TAG, "Error getting bitmap", e); 
    } 
    return bm; 
} 

我没有测试此代码,我只是偏执狂和喜欢,以确保SO答案是有用的,即使网络上的其他网站消失:-)

0

首先,您应该下载图像并将其保存在您的device(sdcard or memory)中。 然后,获取其文件路径,使用Uri.parse(filePath)最终将路径转换为uri ,请致电ImageViewsetImageURI(Uri)填写完整。 - 我用这种方式来达到我的目的,并且存在一个错误:如果图像很大(可能超过1Mb左右,可能会报告出现“Memeroy异常”!!!)