【发布时间】:2017-12-22 07:38:22
【问题描述】:
我正在我的音乐应用中制作“最近播放”的播放列表。我创建了一个数据库来存储与歌曲相关的信息。我当前的代码所做的是,每当我播放一首歌曲时,它都会将其添加到数据库中,并且我可以成功显示它。但问题是当我播放同一首歌曲两次时,数据库没有更新。 例如,我分别播放歌曲 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();
}
【问题讨论】:
-
试试这个 Collections.reverse(yourList);
-
你有一个在字符串数组中的歌曲列表然后你在
media player播放。创建另一个列表并将其添加到。
标签: android sqlite audio android-music-player