Android将对象保存为sqlite中的blob

时间:2014-05-10 06:23:02

标签: android sqlite gridview

这是对的。我有这个gridview。我想在sqlite中将其项目保存为blob。所以当我在sqlite中打开保存数据列表时,只需加载保存items并致电adapter.notifyDataSetChanged到我的gridview

我试过这个,但我得到NotSerializableException错误

List items = new ArrayList();

public static byte[] serializeObject(Object o) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        try {
            ObjectOutput out = new ObjectOutputStream(bos);
            out.writeObject(o);
            out.close();

            // Get the bytes of the serialized object
            byte[] buf = bos.toByteArray();

            return buf;
        } catch (IOException ioe) {
            Log.e("serializeObject", "error", ioe);

            return null;
        }
    }

我的插入行

public long insertRow(byte[] data) {
    /*
     * CHANGE 3:
     */
    // TODO: Update data in the row with new fields.
    // TODO: Also change the function's arguments to be what you need!
    // Create row's data:
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_DATA, data);

    // Insert it into the database.
    return db.insert(DATABASE_TABLE, null, initialValues);
}

然后我插入序列化对象

myDB.insertRow(MyDBAdapter.serializeObject(items));

我也很困惑。我应该保存适配器或项目列表'?

2 个答案:

答案 0 :(得分:24)

我将数据作为BLOB存储在我的数据库中的方式是将它们转换为JSON然后存储字节。 e.g。

ArrayList<Person> persons  = new ArrayList<>();
Gson gson = new Gson();
ContentValues values = new ContentValues();
values.put(MyProvider.KEY_DATA, gson.toJson(persons).getBytes());
// insert or update the DB

并获取列表

byte[] blob = cursor.getBlob(cursor.getColumnIndex(MyProvider.KEY_DATA));
String json = new String(blob);
Gson gson = new Gson();
ArrayList<Person> persons = gson.fromJson(json, new TypeToken<ArrayList<Person>>()
                                 {}.getType());

编辑:要回答您的上一个问题,您应该存储您的数据(项目列表)。

答案 1 :(得分:0)

通过(Object o)而不是(Serializable o)。然后,在传递的内容中,将implements Serializable添加到类定义中。