我正在我的音乐应用中制作“最近播放”的播放列表。我创建了一个数据库,用于存储与歌曲相关的信息。我当前的代码所做的是每当我播放一首歌时它将数据库添加到数据库中我就能成功显示它。但问题是当我两次播放同一首歌时,数据库没有更新。 例如,我分别演奏了歌曲A,歌曲B,歌曲C,歌曲D.然后它将显示歌曲A,歌曲B,歌曲C,歌曲D.但是如果我再次分别播放歌曲A,歌曲B,歌曲C,歌曲D和歌曲B.然后它再次显示相同的内容(歌曲A,歌曲B,歌曲C,歌曲D)。但我想要的是:歌曲A,歌曲C,歌曲D,歌曲B.它应该更新并显示最新播放的歌曲,这就是我的意思。我无法弄明白该怎么做。
表创建代码:
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME+ "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_NAME + " TEXT,"
+ KEY_ARTIST + " TEXT,"
+ KEY_DURATION + " INTEGER,"
+ KEY_ART + " TEXT"
+ ");";
sqLiteDatabase.execSQL(CREATE_TABLE);
}
获取和显示数据的代码:
public ArrayList<SongInfoModel> getRecentlyPlayed(){
ArrayList<SongInfoModel> rpList = new ArrayList<>();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
do{
long id = cursor.getLong(0);
String SongName = cursor.getString(1);
String artistName = cursor.getString(2);
long dur = cursor.getLong(3);
String Art = cursor.getString(4);
SongInfoModel sh = new SongInfoModel(id,SongName,artistName,dur,null,Art);
rpList.add(sh);
}while (cursor.moveToNext());
}
return rpList;
添加数据的代码:
public void addSong(SongInfoModel songInfoModel){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, songInfoModel.getSongID());
values.put(KEY_NAME, songInfoModel.getSongName());
values.put(KEY_ARTIST, songInfoModel.getArtistName());
values.put(KEY_DURATION, songInfoModel.getDuration());
values.put(KEY_ART, songInfoModel.getAlbumIDArtwork());
db.insert(TABLE_NAME,null,values);
db.close();
}
答案 0 :(得分:0)
在创建查询&#34;)&#34;;
中更改您的表格查询尾随分号String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME+ "("
+ KEY_ID + " INTEGER PRIMARY KEY,"
+ KEY_NAME + " TEXT,"
+ KEY_ARTIST + " TEXT,"
+ KEY_DURATION + " INTEGER,"
+ KEY_ART + " TEXT"
+ ")";
sqLiteDatabase.execSQL(CREATE_TABLE);
答案 1 :(得分:0)
我想到的是添加一个表示播放次数的字段,比如说KEY_TIMES。
添加歌曲时检查
最后,为获取值只使用相同的查询,但按此新字段排序:
String selectQuery = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + KEY_TIMES;
要创建表格,请使用:
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME+ "(" +
KEY_ID + " INTEGER PRIMARY KEY," +
KEY_NAME + " TEXT," +
KEY_ARTIST + " TEXT," +
KEY_DURATION + " INTEGER," +
KEY_LAST_PLAYED + " INTEGER," +
KEY_TIMES + " INTEGER," +
KEY_ART + " TEXT" + ");";
sqLiteDatabase.execSQL(CREATE_TABLE);
}
然后当您要添加歌曲时,使用您要添加的ID进行查询,如果查询返回表中的条目,请进行查询以更新KEY_TIMES字段。如果它没有返回条目,请在您现在正在进行插入时进行插入,但添加新字段。 (现在不能为此提供代码)
答案 2 :(得分:0)
您可以做的是在代码中添加lastPlayed日期字段。所以它看起来像这样。
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_TABLE =
"CREATE TABLE " + TABLE_NAME+ "(" +
KEY_ID + " INTEGER PRIMARY KEY," +
KEY_NAME + " TEXT," +
KEY_ARTIST + " TEXT," +
KEY_DURATION + " INTEGER," +
KEY_LAST_PLAYED + " INTEGER," +
KEY_ART + " TEXT" + ");";
sqLiteDatabase.execSQL(CREATE_TABLE);
}
显示数据的代码如下所示,并确保按上次播放顺序排序:
public ArrayList<SongInfoModel getRecentlyPlayed() {
ArrayList<SongInfoModel> rpList = new ArrayList<>();
String selectQuery = "SELECT * FROM " + TABLE_NAME + " ORDER BY " + KEY_LAST_PLAYED + " ASC;";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery,null);
if(cursor.moveToFirst()){
do{
long id = cursor.getLong(0);
String SongName = cursor.getString(1);
String artistName = cursor.getString(2);
long dur = cursor.getLong(3);
String Art = cursor.getString(5);
SongInfoModel sh = new SongInfoModel(id,SongName,artistName,dur,null,Art);
rpList.add(sh);
}while (cursor.moveToNext());
}
return rpList;
}
以及添加数据的代码:
public void addSong(SongInfoModel songInfoModel){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, songInfoModel.getSongID());
values.put(KEY_NAME, songInfoModel.getSongName());
values.put(KEY_ARTIST, songInfoModel.getArtistName());
values.put(KEY_DURATION, songInfoModel.getDuration());
values.put(KEY_LAST_PLAYED, new Date().getTime());
values.put(KEY_ART, songInfoModel.getAlbumIDArtwork());
db.insert(TABLE_NAME,null,values);
db.close();
}
此组合将按上次播放的顺序为您提供数据。