is this right. I have this gridview
. I want to save its item as blob in sqlite. so when i open the list of save data in sqlite ill just load the save items
and call adapter.notifyDataSetChanged
to my gridview
I tried this one but I get NotSerializableException
error
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;
}
}
my insert row
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);
}
then I insert the serialize object
myDB.insertRow(MyDBAdapter.serializeObject(items));
also i'm confuse. should i save the adapter or the list of items'?
The way I store data as BLOB in my DB, is by converting them to JSON and then storing the bytes. 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
And to get the list back
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());
Edit: to answer your last question, you should store your data (list of items).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With