您需要id确定要获取歌词的歌曲。
您可以将getLyrics 方法更改为:-
public Cursor getLyrics(long id){
SQLiteDatabase db = this.getWritableDatabase();
String[] whereargs = new string[]{String.valueOf(id)};
String sql = "select Lyrics from Songs WHERE id=?";
return db.rawQuery(sql, null);
}
您将其与在 onItemClick 方法中提取 id 结合使用,并通过 Intent Extra 将其传递给第二个活动。
id 可以是定义为 rowid 列的别名的列。例如
CREATE TABLE Songs (id INTEGER PRIMARY KEY, .....
或者您可以在获取列表视图的数据时选择使用rowid AS id,例如
SELECT *, rowid AS id FROM Songs
如何从 Listview 中提取 id 的细节取决于 ListView 的来源。
您还可以更改 getLyrics 以返回带有歌词的字符串,例如:-
public String getLyrics(long id){
String rv = "no lyrics found";
SQLiteDatabase db = this.getWritableDatabase();
String[] whereargs = new string[]{String.valueOf(id)};
String sql = "select Lyrics from Songs WHERE id=?";
Cursor c = db.rawQuery(sql, null);
if (c.moveToFirst()) {
rv = c.getString(0);
}
c.close();
return rv;
}
我建议考虑不使用 rawQuery,除非需要,而是使用方便的方法(query 方法),并且尽量不使用硬编码的列偏移量(即c.getString(0) 中的 0),但是而是使用从列名派生的偏移量,这样更灵活且不易出错。
因此,假设将歌曲的歌词作为字符串返回,我建议:-
public String getLyrics(long id) {
String rv = "no lyrics found";
String whereclause = "id=?";
String[] whereargs = new String[]{String.valueOf(id)};
String[] columns = new String[]{"Lyrics"};
Cursor c = this.getWritableDatabase().query("Songs",columns,whereclause,weherargs,null,null,null);
if (c.moveToFirst()) {
rv = c.getString(c.getColumnIndex("Lyrics"));
}
c.close();
return rv;
}