Android 超简单音乐播放器(十一)将获取的歌词存入数据库

关于数据库

Android自带了一种轻量级数据库SQLite.敲贴心啊有木有~
用起来也很简单。

首先,创建数据库嘛

新建一个LrcData 这里要继承SQLiteOpenHelper 并重写两个方法。OnCreate 在创建时会调用,所以我们建表的逻辑就写在这里面。onUpgrade则是更新数据库时调用。

      public void onCreate(SQLiteDatabase db) 
      1、在第一次打开数据库的时候才会走
      2、在清除数据之后再次运行-->打开数据库,这个方法会走
      3、没有清除数据,不会走这个方法
      4、数据库升级的时候这个方法不会走
      public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
      1、第一次创建数据库的时候,这个方法不会走
      2、清除数据后再次运行(相当于第一次创建)这个方法不会走
      3、数据库已经存在,而且版本升高的时候,这个方法才会调用
      public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) 
      1、只有新版本比旧版本低的时候才会执行
      2、如果不执行降级操作,会抛出异常
public class LrcData extends SQLiteOpenHelper {
    private static final String DB_NAME = "LRC.DB";
    private static final int DB_VERSION = 1;
    public LrcData(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }
    public LrcData(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }//创建时,只需传入context即可。
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String NewSQL = LrcTable.getCreatSONGLRCSQL();
        sqLiteDatabase.execSQL(NewSQL);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
    public static final class LrcTable {
        public static final String TBL_NAME = "SONGLRC";
        public static final String COL_ID = "ID";
        public static final String COL_SONG = "SONG";
        public static final String COL_LRC = "LRC";

        public static String getCreatSONGLRCSQL(){
            String sql = "CREATE TABLE "
                    + TBL_NAME +"(" + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
                    + COL_LRC + " TEXT,"
                    + COL_SONG + " VARCHAR(50)"//注意这里没有“,"!!
                    +")";
            return sql;
        }
    }
}

然后,新建一个操作数据库的工具类

主要就是两个,首先是添加相应的歌曲名和歌词内容进去。第二个就是歌曲名去查找有没有歌词。感觉关于增删查改 第一行代码已经写得非常清楚了。根据自己的需要去写就好啦~

public class LrcDataUtil {
    private LrcData lrcData;
    public LrcDataUtil (Context context){
        this.lrcData = new LrcData(context);
    }
    //判断数据库中是否有该歌曲歌词数据
    public String findLrc(Song song){
        SQLiteDatabase db = lrcData.getReadableDatabase();
        Cursor cursor = db.query(LrcData.LrcTable.TBL_NAME,null,null,null,null,null,null,null);
        for (cursor.moveToFirst();!cursor.isAfterLast(); cursor.moveToNext()) {
            if (cursor.getString(cursor.getColumnIndex(LrcData.LrcTable.COL_SONG)).equals(song.getALLName())){
                return cursor.getString(cursor.getColumnIndex(LrcData.LrcTable.COL_LRC));
            }
        }
        return "";
    }
    //将歌词存入数据库
    public void addLrc(String lrc,Song song){
        if (!lrc.equals("")){
            SQLiteDatabase db = lrcData.getReadableDatabase();
            ContentValues contentValues = new ContentValues();
            contentValues.put(LrcData.LrcTable.COL_LRC,lrc);
            contentValues.put(LrcData.LrcTable.COL_SONG,song.getALLName());
            db.insert(LrcData.LrcTable.TBL_NAME,null,contentValues);
        }
    }
}

最后,就是修改获取歌词的代码。

主要就是两个,首先是添加相应的歌曲名和歌词内容进去。第二个就是歌曲名去查找有没有歌词。感觉关于增删查改 第一行代码已经写得非常清楚了。根据自己的需要去写就好啦~

    public void initLRC(final Song songName) {
        lrc = lrcDataUtil.findLrc(songName);//先判断数据库里有没有歌词,如果有就直接显示,没有则通过API去获取。
            if (lrc.equals("")) {
                HttpUtil.requstLrcData(songName.getSong(), new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        lrc = "";
                        Log.i("fali", "fali" + lrc);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Log.i("fali", "fali" + lrc + "2");
                                ILrcBulider bulider = new DefaultLrcBulider();
                                List<LrcRow> rows = bulider.getLrcRows(lrc);
                                Log.i("fali", "fali" + rows + "3");
                                mLrcView.setLrc(rows);
                            }
                        });
                    }
                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        lrc = LrcUtil.getLrcFromAssets(LrcJsonUtil.parseJOSNWithGSON(response, 1));
                        Log.i("Response", "Response1" + lrc + "1");
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                lrcDataUtil.addLrc(lrc, songName);//获取到的歌词存入数据库
                                Log.i("Response", "Response1" + lrc + "2");
                                ILrcBulider bulider = new DefaultLrcBulider();
                                List<LrcRow> rows = bulider.getLrcRows(lrc);
                                Log.i("Response", "Response1" + rows + "2");
                                mLrcView.setLrc(rows);
                            }
                        });
                    }
                });
            } else {
                ILrcBulider bulider = new DefaultLrcBulider();
                List<LrcRow> rows = bulider.getLrcRows(lrc);
                mLrcView.setLrc(rows);
            }
        }

你可能感兴趣的:(Android 超简单音乐播放器(十一)将获取的歌词存入数据库)