Android save pictrue by SQLiteOpenHelper
原理:图片是二进制文件,所以使用blob类型,将图片转换成字节数组,存储到数据库中。
方法一:
public void saveIcon(Bitmap icon) { if (icon == null) { return; } // 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的 // BLOB类型 final ByteArrayOutputStream os = new ByteArrayOutputStream(); // 将Bitmap压缩成PNG编码,质量为100%存储 icon.compress(Bitmap.CompressFormat.PNG, 100, os); // 构造SQLite的Content对象,这里也可以使用raw ContentValues values = new ContentValues(); // 写入数据库的Browser.BookmarkColumns.TOUCH_ICON字段 values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray()); DBUtil.update(....);//调用更新或者插入到数据库的方法 }
方法二:如果数据表入口时一个content:URI
public void saveIcon(Bitmap icon) { if (icon == null) { return; } // 最终图标要保存到浏览器的内部数据库中,系统程序均保存为SQLite格式,Browser也不例外,因为图片是二进制的所以使用字节数组存储数据库的 // BLOB类型 final ByteArrayOutputStream os = new ByteArrayOutputStream(); // 将Bitmap压缩成PNG编码,质量为100%存储 icon.compress(Bitmap.CompressFormat.PNG, 100, os); // 构造SQLite的Content对象,这里也可以使用raw ContentValues values = new ContentValues(); // 写入数据库的Browser.BookmarkColumns.TOUCH_ICON字段 values.put(Browser.BookmarkColumns.TOUCH_ICON, os.toByteArray()); DBUtil.update(....);//调用更新或者插入到数据库的方法 }
从数据库中读取:
byte[] blob = cur.getBlob(cur.getColumnIndex(KEY_IMG)); Bitmap bmp = BitmapFactory.decodeByteArray(blob, 0, blob.length);