package io.hefuyi.listener.provider; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * Created by hefuyi on 2016/12/31. */ public class FavoriteSong { private static volatile FavoriteSong sInstance = null; private MusicDB mMusicDatabase = null; private FavoriteSong(final Context context) { mMusicDatabase = MusicDB.getInstance(context); } public static FavoriteSong getInstance(final Context context) { if (sInstance == null) { synchronized (FavoriteSong.class) { if (sInstance == null) { sInstance = new FavoriteSong(context); } } } return sInstance; } public void onCreate(final SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + FavoriteSong.FavoriteSongColumns.NAME + " (" + FavoriteSongColumns.SONGID + " LONG NOT NULL," + FavoriteSongColumns.TIMEADDED + " LONG NOT NULL);"); } public void onUpgrade(final SQLiteDatabase db, final int oldVersion, final int newVersion) { } public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + FavoriteSongColumns.NAME); onCreate(db); } public int addFavoriteSong(final long[] songId) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); Cursor cursor = null; int insert = 0; try{ for (long aSongId : songId) { cursor = database.query(FavoriteSongColumns.NAME, new String[]{FavoriteSongColumns.SONGID}, FavoriteSongColumns.SONGID + " =? ", new String[]{String.valueOf(songId)}, null, null, null); if (cursor != null && cursor.getCount() == 0) { //若无重复则插入 ContentValues values = new ContentValues(2); values.put(FavoriteSongColumns.SONGID, aSongId); values.put(FavoriteSongColumns.TIMEADDED, System.currentTimeMillis()); database.insert(FavoriteSongColumns.NAME, null, values); insert++; } } return insert; }finally { if (cursor != null) { cursor.close(); } database.setTransactionSuccessful(); database.endTransaction(); } } public int removeFavoriteSong(final long[] songId) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); Cursor cursor = null; int deleted = 0; try { for (long aSongId : songId) { cursor = database.query(FavoriteSongColumns.NAME, new String[]{FavoriteSongColumns.SONGID}, FavoriteSongColumns.SONGID + " =? ", new String[]{String.valueOf(aSongId)}, null, null, null); if (cursor != null && cursor.getCount() >= 0) { database.delete(FavoriteSongColumns.NAME, FavoriteSongColumns.SONGID + " =? ", new String[]{String.valueOf(aSongId)}); deleted++; } } return deleted; }finally { if (cursor != null) { cursor.close(); } database.setTransactionSuccessful(); database.endTransaction(); } } public Cursor getFavoriteSong() { final SQLiteDatabase database = mMusicDatabase.getReadableDatabase(); Cursor cursor = database.query(FavoriteSongColumns.NAME, new String[]{FavoriteSongColumns.SONGID}, null, null, null, null, FavoriteSongColumns.TIMEADDED + " DESC", null); return cursor; } public boolean isFavorite(long songId) { final SQLiteDatabase database = mMusicDatabase.getWritableDatabase(); database.beginTransaction(); Cursor cursor = null; try{ cursor = database.query(FavoriteSongColumns.NAME, new String[]{FavoriteSongColumns.SONGID}, FavoriteSongColumns.SONGID + " =? ", new String[]{String.valueOf(songId)}, null, null, null); if (cursor != null && cursor.getCount() > 0) { return true; } }finally { if (cursor != null) { cursor.close(); } database.setTransactionSuccessful(); database.endTransaction(); } return false; } public interface FavoriteSongColumns { /* Table name */ String NAME = "favoritesong"; /* What was searched */ String SONGID = "songid"; /* Time of search */ String TIMEADDED = "timeadded"; } }