我想使ImageView在网站上显示图像。因此,我创建了一个新的ImageView并执行imgView.setImageURI(uri);
设置Uri时出现错误的位图错误
当我启动应用程序时,图像不出现,并且出现错误“resolveUri在坏Bitmap Uri(uri)上失败”。
关于如何解决这个问题的任何想法?
我想使ImageView在网站上显示图像。因此,我创建了一个新的ImageView并执行imgView.setImageURI(uri);
设置Uri时出现错误的位图错误
当我启动应用程序时,图像不出现,并且出现错误“resolveUri在坏Bitmap Uri(uri)上失败”。
关于如何解决这个问题的任何想法?
嗯..你需要下载图像,然后将其设置为位图。 这是许多例子之一。 http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html
如果它不是内容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答案是有用的,即使网络上的其他网站消失:-)
首先,您应该下载图像并将其保存在您的device(sdcard or memory)
中。 然后,获取其文件路径,使用Uri.parse(filePath)
最终将路径转换为uri ,请致电ImageView
的setImageURI(Uri)
填写完整。 - 我用这种方式来达到我的目的,并且存在一个错误:如果图像很大(可能超过1Mb左右,可能会报告出现“Memeroy异常”!!!)