寻求上述建议。 希望创建一个SQLlite数据库,其中每行数据主要是字符串,但我也想保存从手机中获取的图像。
建议还是可以保存位图图像的编码基本64字符串,并在调用数据行时将其转换回图像?
我还在某处读过有一个可以保存图像二进制数据的blob列类型。
提前致谢!
干杯
答案 0 :(得分:4)
是的,这绝对可以,但你也可以使用Blob(参见这篇文章How to store and retrieve a byte array (image data) to and from a SQLite database?)。但是,如果要将图像存储为Base64字符串,则很容易,只需使用Apache库将原始图像bytes[]
编码为Base64 String
。
以下是参考:Apache Base 64
首先,您需要使用bytes[]
对图像public static String encodeBase64String(byte[] binaryData)
进行编码。
然后,您可以将Base64
字符串存储在数据库中。
当您去检索图片时,只需使用public static byte[] decodeBase64(String base64Data)
要将String
转换回bytes[]
,并使用BitmapFactory
获取Bitmap
。
编辑:
稍微使用了这一点,并且在添加核心commons-codec-1.9.jar
后出于某种原因,我得到了java.lang.NoSuchMethodError
。如果此问题不是我的构建特有的,它与:
String base64string = new String(Base64.encodeBase64(drawable), "UTF-8");
答案 1 :(得分:1)
我自己喜欢使用BLOB数据类型。它可能会占用您数据库上的大量空间,但它永远不会失败。您需要将位图图像转换为二进制数据类型(byte [])并将二进制数据存储到DB。如果您尝试将uri编码为字符串,则在从DB中检索图像时将给出null结果。请参阅此link