这是对的。我有这个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));
我也很困惑。我应该保存适配器或项目列表'?
答案 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
添加到类定义中。