2011-02-11 54 views
0

我有一个Sqlite数据库,其中base64代码字符串存储为BLOB。我想从数据库中获取这个BLOB并解码base64并在ImageView中显示图像。 我已阅读关于编码和解码base64,这就是我现在使用的。如何将base64 blob解码为位图Android?

 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

我有一个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列,如果你想在表中的图像。

+0

该列是数据类型BLOB。这是我必须处理的。因此,我正在寻找从数据库获取图像的最佳方式。我一直在尝试很多方法,猜想我迷路了。 – kakka47 2011-02-11 13:51:40