如何将base64 blob解码为位图Android?

时间:2011-02-11 12:45:13

标签: android database sqlite base64

我有一个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代码的有效性?谢谢!

1 个答案:

答案 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列中。