我有一个Sqlite数据库,其中base64代码字符串存储为BLOB。我想从数据库中获取此BLOB并解码base64并在ImageView中显示图像。 我已经阅读过有关编码和解码base64的内容,这就是我现在正在使用的内容。
String[] image = new String[100000];
if (cursor.moveToFirst()){
int i = 0;
do {image[i] = cursor.getString(1);
i++;}
while (cursor.moveToNext());
String imagebyte = image[0];
byte[] decodedString = Base64.decode(imagebyte, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
mImage.setImageBitmap(decodedByte);
但没有任何显示,我也没有收到任何错误消息。为了找出问题我尝试编码和解码图像,然后显示位图。这是解码它的正确方法吗?我在这里使用cursor.getString(1),我也试过使用getBlob(1),但仍然没有显示。我应该使用getString还是getBlob? 有没有一种简单的方法来检查base64代码的有效性?谢谢!
答案 0 :(得分:0)
我有一个Sqlite数据库,其中base64代码字符串存储为BLOB。
为什么呢?为什么不把图像放在BLOB中?您通过Base64编码获得了什么?这会花费你的CPU时间,垃圾收集时间和存储空间。
String[] image = new String[100000];
为什么您认为需要100,000个String
个对象?
do {image[i] = cursor.getString(1);
i++;}
while (cursor.moveToNext());
当您只使用其中一个行时,为什么要为结果集中的所有行检索此列?特别是考虑到你显然在主应用程序线程上做了所有这些,因此你最终会因应用程序无响应(ANR)错误而崩溃?
此外,如果此列在您的数据库中声明为BLOB,您确定getString()
将按预期工作吗?
这是解码它的正确方法吗?
这取决于你如何编码它。
我应该使用getString还是getBlob?
这取决于您如何将数据放入表中以及列具有的数据类型。他们都应该匹配。
但是,如果你想在表格中存储图像,我会摆脱所有Base64的东西并将图像字节数组存储在BLOB列中。