数据库中图片存的BLOB,使用的ListView,SimpleAdapter适配器时,报这个错误该怎么改呢?
错误:W/ImageView: resolveUri failed on bad bitmap uri: android.graphics.Bitmap@69a95d2
可能是以下原因:
图片没有正确的储存到数据库,可以在数据库管理器中检查数据是否正确,确保二进制数据已成功存储。
在读取二进制数据后,没有正确的转换成 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);
不知道你这个问题是否已经解决, 如果还没有解决的话:这个问题可能是因为使用了错误的URI,具体的解决方法如下:
byte[] imageBytes = cursor.getBlob(imageIndex);
Bitmap bmp = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
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);
}
}
};
String uri = "content://your.package.name/your_image_table/" + imageId;
imageView.setImageURI(Uri.parse(uri));
如果以上的方法都没有解决你的问题,那么可能是其他原因导致的。
图片可以存储图片地址字符串。直接存储图片的字节数据。图片回显时还需要处理,并不是最佳选择