设置Uri时出现错误的位图错误

ret*_*nuh 11 android

我想让ImageView在网站上显示图像.所以我创建了一个新的ImageView并执行imgView.setImageURI(uri);

当我启动应用程序时,图像不会出现,我收到错误,"resolveUri在坏位图Uri(uri)上失败".

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

pax*_*blo 21

如果它不是内容URI,则此链接可能有所帮助.它似乎表明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;
} 
Run Code Online (Sandbox Code Playgroud)

我没有测试过这段代码,我只是偏执,喜欢确保SO答案有用,即使网上的其他网站都消失了:-)


Ale*_*voy 5

嗯..你需要下载图像,然后将其设置为位图.这是众多例子中的一个. http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html


Efi*_*i G 5

Glide是一个很棒的用于显示图像的库!

 Glide.with(context)
                    .load(uri)
                    .into(imageView);
Run Code Online (Sandbox Code Playgroud)