Вам нужно 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);
}
Это используется в сочетании с извлечением id в методе onItemClick
и передачей этого во 2-е действие с помощью Intent Extra.
id может быть столбцом, определенным как псевдоним столбца rowid . например,
CREATE TABLE Songs (id INTEGER PRIMARY KEY, .....
или вы можете выбрать использование rowid AS id
при получении данных для списка, например,
SELECT *, rowid AS id FROM Songs
Особенности извлечения id из ListView зависят от источника 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
), а также пытаться не использовать жестко закодированные смещения столбцов (т. Е. 0 в c.getString(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;
}