最好的节省方法&检索图像到数据库

时间:2014-01-10 15:46:44

标签: android image sqlite

寻求上述建议。 希望创建一个SQLlite数据库,其中每行数据主要是字符串,但我也想保存从手机中获取的图像。

建议还是可以保存位图图像的编码基本64字符串,并在调用数据行时将其转换回图像?

我还在某处读过有一个可以保存图像二进制数据的blob列类型。

提前致谢!

干杯

2 个答案:

答案 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