Android在sqlite中将对象保存为blob

这是正确的吗。 我有这个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)); 

我也很迷惑。 我应该保存适配器还是项目列表?

Related of "Android在sqlite中将对象保存为blob"

我将数据存储为BLOB的方式是将其转换为JSON,然后存储字节。 例如

 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()); 

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