Android SQLite数据库图片上传无显示

数据库中图片存的BLOB,使用的ListView,SimpleAdapter适配器时,报这个错误该怎么改呢?

错误:W/ImageView: resolveUri failed on bad bitmap uri: android.graphics.Bitmap@69a95d2

img

img

可能是以下原因:

图片没有正确的储存到数据库,可以在数据库管理器中检查数据是否正确,确保二进制数据已成功存储。

在读取二进制数据后,没有正确的转换成 Bitmap 对象,可以使用 BitmapFactory.decodeByteArray() 方法将二进制数据转换为 Bitmap 对象。如果转换失败,可能需要检查数据本身是否完整。

显示图片的 ImageView 控件没有正确的设置 Bitmap 对象,需要确保在设置 ImageView 的展示图片时,传入了正确的 Bitmap 对象,例如:

byte[] data = // 读取二进制数据
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
ImageView imageView = findViewById(R.id.imageView);
imageView.setImageBitmap(bitmap);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    这个问题可能是因为使用了错误的URI,具体的解决方法如下:

    1. 首先,确保在数据库读取时正确的将BLOB转换为Bitmap对象。 可以参考以下代码:
    byte[] imageBytes = cursor.getBlob(imageIndex);
    Bitmap bmp = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
    
    1. 如果第一步正确,那么问题可能出在SimpleAdapter中。 参考以下代码:
    SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.list_item, from, to) {
        @Override
        public void setViewImage(ImageView v, String value) {
            if (value.startsWith("content://")) {
                v.setImageURI(Uri.parse(value));
            } else {
                byte[] imageBytes = Base64.decode(value, Base64.DEFAULT);
                Bitmap bmp = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
                v.setImageBitmap(bmp);
            }
        }
    };
    
    1. 如果以上两步都没有解决问题,那么可能是Uri的格式出现了问题。 参考以下代码:
    String uri = "content://your.package.name/your_image_table/" + imageId;
    imageView.setImageURI(Uri.parse(uri));
    

    如果以上的方法都没有解决你的问题,那么可能是其他原因导致的。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

图片可以存储图片地址字符串。直接存储图片的字节数据。图片回显时还需要处理,并不是最佳选择