DrawableをSQLiteへ保存/読み出し
というわけで、上記コードをあれこれして Drawableを SQLiteへ保存/読み出しができるようになったのが下記のコード。
public long insert(MyData myData) { ContentValues values = new ContentValues(); values.put(COLUMN_IMAGE, getByteArrayFromDrawable(myData.Image)); return db.insert(TABLE_NAME, null, values); } public List<MyData> findAll() { List<MyData> myDataList = new ArrayList<MyData>(); Cursor cursor = db.query(TABLE_NAME, TABLE_COLUMNS, null, null, null, null, COLUMN_INDEXNUM); while(cursor.moveToNext()) { MyData myData = new MyData(); myData.Image = getDrawableFromByteArray(cursor.getBlob(cursor.getColumnIndex(COLUMN_IMAGE))); myDataList.add(myData); } return myDataList; } // ByteArray を Drawable に変換 public Drawable getDrawableFromByteArray(byte[] b) { return new BitmapDrawable(BitmapFactory.decodeByteArray(b, 0, b.length)); } // Drawable を ByteArray に変換 public byte[] getByteArrayFromDrawable(Drawable d) { Bitmap bitmap = ((BitmapDrawable)d).getBitmap(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); byte[] bitMapData = stream.toByteArray(); return bitMapData; }
かなり端折ってるけど、変換の部分は大体わかると思う。
MyDataにはもっとメンバがあるけど、とりあえず Imageの部分だけ。