您的位置:首页 > 移动开发 > Android开发

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

2017-10-27 17:28 344 查看

关于数据库

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: