Back to project page android-data-persistence.
The source code is released under:
MIT License
If you think the Android project android-data-persistence listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.teamtreehouse.mememaker.database; //from ww w. j a v a 2s . co m import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.provider.BaseColumns; import com.teamtreehouse.mememaker.models.Meme; import com.teamtreehouse.mememaker.models.MemeAnnotation; import java.util.ArrayList; import java.util.Date; /** * Created by Evan Anger on 8/17/14. */ public class MemeDataSource { private Context mContext; private MemeSQLiteHelper mMemeSqliteHelper; public MemeDataSource(Context context) { mContext = context; mMemeSqliteHelper = new MemeSQLiteHelper(context); } private SQLiteDatabase open() { return mMemeSqliteHelper.getWritableDatabase(); } private void close(SQLiteDatabase database) { database.close(); } public void delete(int memeId) { SQLiteDatabase database = open(); database.beginTransaction(); database.delete(MemeSQLiteHelper.ANNOTATIONS_TABLE, String.format("%s=%s", MemeSQLiteHelper.COLUMN_FOREIGN_KEY_MEME, String.valueOf(memeId)), null); database.delete(MemeSQLiteHelper.MEMES_TABLE, String.format("%s=%s", BaseColumns._ID, String.valueOf(memeId)), null); database.setTransactionSuccessful(); database.endTransaction(); } public ArrayList<Meme> read() { ArrayList<Meme> memes = readMemes(); addMemeAnnotations(memes); return memes; } public ArrayList<Meme> readMemes() { SQLiteDatabase database = open(); Cursor cursor = database.query( MemeSQLiteHelper.MEMES_TABLE, new String [] {MemeSQLiteHelper.COLUMN_MEME_NAME, BaseColumns._ID, MemeSQLiteHelper.COLUMN_MEME_ASSET}, null, //selection null, //selection args null, //group by null, //having MemeSQLiteHelper.COLUMN_MEME_CREATE_DATE + " DESC"); //order ArrayList<Meme> memes = new ArrayList<Meme>(); if(cursor.moveToFirst()) { do { Meme meme = new Meme(getIntFromColumnName(cursor, BaseColumns._ID), getStringFromColumnName(cursor, MemeSQLiteHelper.COLUMN_MEME_ASSET), getStringFromColumnName(cursor, MemeSQLiteHelper.COLUMN_MEME_NAME), null); memes.add(meme); }while(cursor.moveToNext()); } cursor.close(); close(database); return memes; } public void addMemeAnnotations(ArrayList<Meme> memes) { SQLiteDatabase database = open(); for (Meme meme : memes) { ArrayList<MemeAnnotation> annotations = new ArrayList<MemeAnnotation>(); Cursor cursor = database.rawQuery( "SELECT * FROM " + MemeSQLiteHelper.ANNOTATIONS_TABLE + " WHERE MEME_ID = " + meme.getId(), null); if(cursor.moveToFirst()) { do { MemeAnnotation annotation = new MemeAnnotation( getIntFromColumnName(cursor, BaseColumns._ID), getStringFromColumnName(cursor, MemeSQLiteHelper.COLUMN_ANNOTATION_COLOR), getStringFromColumnName(cursor, MemeSQLiteHelper.COLUMN_ANNOTATION_TITLE), getIntFromColumnName(cursor, MemeSQLiteHelper.COLUMN_ANNOTATION_X), getIntFromColumnName(cursor, MemeSQLiteHelper.COLUMN_ANNOTATION_Y)); annotations.add(annotation); } while(cursor.moveToNext()); } meme.setAnnotations(annotations); cursor.close(); } database.close(); } public void update(Meme meme) { SQLiteDatabase database = open(); database.beginTransaction(); ContentValues updateMemeValues = new ContentValues(); updateMemeValues.put(MemeSQLiteHelper.COLUMN_MEME_NAME, meme.getName()); database.update(MemeSQLiteHelper.MEMES_TABLE, updateMemeValues, String.format("%s=%d", BaseColumns._ID, meme.getId()), null); for(MemeAnnotation annotation : meme.getAnnotations()) { ContentValues updateAnnotations = new ContentValues(); updateAnnotations.put(MemeSQLiteHelper.COLUMN_ANNOTATION_TITLE, annotation.getTitle()); updateAnnotations.put(MemeSQLiteHelper.COLUMN_ANNOTATION_X, annotation.getLocationX()); updateAnnotations.put(MemeSQLiteHelper.COLUMN_ANNOTATION_Y, annotation.getLocationY()); updateAnnotations.put(MemeSQLiteHelper.COLUMN_FOREIGN_KEY_MEME, meme.getId()); updateAnnotations.put(MemeSQLiteHelper.COLUMN_ANNOTATION_COLOR, annotation.getColor()); if(annotation.hasBeenSaved()) { database.update(MemeSQLiteHelper.ANNOTATIONS_TABLE, updateAnnotations, String.format("%s=%d", BaseColumns._ID, annotation.getId()) ,null); } else { database.insert(MemeSQLiteHelper.ANNOTATIONS_TABLE, null, updateAnnotations); } } database.setTransactionSuccessful(); database.endTransaction(); close(database); } private int getIntFromColumnName(Cursor cursor, String columnName) { int columnIndex = cursor.getColumnIndex(columnName); return cursor.getInt(columnIndex); } private String getStringFromColumnName(Cursor cursor, String columnName) { int columnIndex = cursor.getColumnIndex(columnName); return cursor.getString(columnIndex); } public void create(Meme meme) { SQLiteDatabase database = open(); database.beginTransaction(); ContentValues memeValues = new ContentValues(); memeValues.put(MemeSQLiteHelper.COLUMN_MEME_NAME, meme.getName()); memeValues.put(MemeSQLiteHelper.COLUMN_MEME_ASSET, meme.getAssetLocation()); memeValues.put(MemeSQLiteHelper.COLUMN_MEME_CREATE_DATE, new Date().getTime()); long memeID = database.insert(MemeSQLiteHelper.MEMES_TABLE, null, memeValues); for (MemeAnnotation annotation : meme.getAnnotations()) { ContentValues annotationValues = new ContentValues(); annotationValues.put(MemeSQLiteHelper.COLUMN_ANNOTATION_COLOR, annotation.getColor()); annotationValues.put(MemeSQLiteHelper.COLUMN_ANNOTATION_TITLE, annotation.getTitle()); annotationValues.put(MemeSQLiteHelper.COLUMN_ANNOTATION_X, annotation.getLocationX()); annotationValues.put(MemeSQLiteHelper.COLUMN_ANNOTATION_Y, annotation.getLocationY()); annotationValues.put(MemeSQLiteHelper.COLUMN_FOREIGN_KEY_MEME, memeID); database.insert(MemeSQLiteHelper.ANNOTATIONS_TABLE, null, annotationValues); } database.setTransactionSuccessful(); database.endTransaction(); close(database); } }