java - 如何使用 Activity android序列化字节数组并将其存储到数据库中?

标签 java android activeandroid

我有一个 byte[] 形式的图像,我需要将此图像保存在数据库中。我使用 Active Android 库来实现此目的。我知道用于此目的的 db 中的数据类型应该是 BLOB。我知道 byte[] 不能直接存储,并且我知道它应该序列化。但是当我尝试序列化它时,问题就出现了。

我尝试将byte[]转换为String,然后将其插入数据库 - 它有效:我将其保存在数据库中。但是,当我从数据库取回这个字符串并将其转换回字节数组时,该数组不等于第一个数组,因此当我尝试将此数组解码为图像时,我收到了

skia: --- SkImageDecoder::Factory returned null.

我的问题是:我应该做什么来序列化字节数组,将其保存到数据库中,将其反序列化回等于第一个字节数组?正是我的意思。

我确实在很长一段时间里一直在寻找如何解决这个问题,恳请您不要在此处分享 Active Android 文档的链接或其他类的 TypeSerializer 实现示例 - 我看到过很多次。 我所需要的正是如何一步一步解决这个问题的方法。

编辑

展示我的 TypeSerializer 代码,它让我有机会使用 Active Android 在数据库中保存字节数组

public class ByteArraySerializer extends TypeSerializer {

    @Override
    public Class<?> getDeserializedType() {
        return byte[].class;
    }

    @Override
    public Class<?> getSerializedType() {
        return String.class;
    }

    @Override
    public Object serialize(Object o) {
        if ( o != null ) {
            return  new String((byte[]) o);
        }
        return null;
    }

    @Override
    public Object deserialize(Object o) {
        if ( o != null ) {
            String str = (String) o;
            return str.getBytes();
        }
        return null;
    }
}

最佳答案

I know that byte[] can't be stored directly

不正确。 byte[] 可以直接存储到 BLOB 列中。

在 JDBC 中,您可以通过调用 PreparedStatement.setBytes() 来设置它,调用 ResultSet.getBytes() 即可获取.

任何功能性 ORM 都应该支持将 BLOB 列映射到 byte[] 字段。

对于 Active Android,请参阅以下链接:

您可能必须将 byte[] 序列化为 java.sql.Blob .

关于java - 如何使用 Activity android序列化字节数组并将其存储到数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205802/

相关文章:

从/system/framework/arm/boot.oat 启动的 Android 原生崩溃

android - ActiveAndroid 清理数据库

java - 我可以让编译器忽略绑定(bind)不匹配错误吗? (或者修复它的这个实例)

java - 根据 .txt 文件中的信息检查用户输入

android - 在 Android 4.x 设备(无根)上,是否可以从应用程序中禁用 checkJNI?

android - 如何从 Cursor 获取数据到 ContextMenu

android - 使用 ActiveAndroid 库存储 HashMap<String, Object>

java - 枚举字段上的 ActiveAndroid NoClassDefFoundError 异常

java - 如何阅读具有特定开头的行

java - 在 Android 中使用带有 include 标签的多个布局