android在sqlite中存储blob并检索它

时间:2013-07-22 12:04:12

标签: android image bytearray blob

我将图像作为字节数组存储在一个项目的sqlite数据库中。 然后我在另一个项目中使用预先填充的表

但问题是Bitmap Factory的结果为null。

存储图像的代码:

Bitmap myLogo = BitmapFactory.decodeResource(getResources(), arr[i]);
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
myLogo.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
b = stream1.toByteArray();

检索图像的代码:

BitmapFactory.Options options = new BitmapFactory.Options();
decodedByte = BitmapFactory.decodeByteArray(Image, 0,Image.length, options);
System.out.println("Image = " + Image);
System.out.println("decodedByte = " + decodedByte);

这里Image返回长度为12的byteArray(Image)。但是位图(decodingByte)返回null值。

我尝试了很多方法但找不到解决方案。请帮忙!

2 个答案:

答案 0 :(得分:0)

这是我从bitmap到string

的函数
    public String BitMapToString(Bitmap bitmap) {
    try {
        Bitmap encogida = Bitmap.createScaledBitmap(bitmap, 226, 180, true);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        encogida.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] b = baos.toByteArray();
        return org.kobjects.base64.Base64.encode(b);
    } catch (Exception ex) {
        Conexiones.escribirLog(Log.getStackTraceString(ex),
                getString(R.string.versionReal));
        Log.e("ERROR BitMapToString ", ""); // ex.getMessage());
        return "";
    }
}

我希望它有所帮助

答案 1 :(得分:0)

您是否在没有options参数的情况下尝试了decodeByteArray?我认为在这种情况下它没用。

无论如何,最好将图像URI存储为String而不是sqlite数据库中的字节数组。

获取URI:

        String path = Images.Media.insertImage(getContentResolver(), mylogo,
                "title", null);

        Uri uriMyLogo = Uri.parse(path);

        String uriString = uriMyLogo.toString() ;

从URI获取图像

                Uri uriLogo = Uri.parse(uriString);

                Bitmap logo = null;
                try {
                    logo = Media.getBitmap(this.getContentResolver(), uriLogo);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

如果您无法按照自己的意愿管理它,我希望它会有所帮助。