Android 使用游标从列值获取数据到活动sqlite
我正在创建一个连接到数据库的歌曲库。数据以一种形式(标题、歌词、urldelvideo)存储,并添加到仅显示标题和id的listview中 当选择listview项目时(在listview中,它只显示标题),它会将我发送到一个带有两个按钮的活动,以选择查看歌词或查看视频的url 如何将存储的信息传递给每个项目的活动 在DBHelper中,我有以下代码来获取歌曲的歌词:Android 使用游标从列值获取数据到活动sqlite,android,sqlite,cursor,Android,Sqlite,Cursor,我正在创建一个连接到数据库的歌曲库。数据以一种形式(标题、歌词、urldelvideo)存储,并添加到仅显示标题和id的listview中 当选择listview项目时(在listview中,它只显示标题),它会将我发送到一个带有两个按钮的活动,以选择查看歌词或查看视频的url 如何将存储的信息传递给每个项目的活动 在DBHelper中,我有以下代码来获取歌曲的歌词: public Cursor getLyrics(){ SQLiteDatabase db = this.getWrita
public Cursor getLyrics(){
SQLiteDatabase db = this.getWritableDatabase();
String sql = "select Lyrics from Songs";
Cursor c = db.rawQuery(sql, null);
return c;
}
活动歌词我有:
lyrics_tv = (TextView) findViewById(R.id.textView4);
Cursor res = getLyrics();
String str = "";
if(res.moveToFirst()){
str= res.getString(0);
}
lyrics_tv.setText(str);
因为我得到了每个项目中第一个项目的歌词…您需要id确定要为哪首歌曲获得歌词 您可以将
getLyms
方法更改为:-
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结合使用,并通过一个额外的意图将其传递给第二个活动
id可以是定义为rowid列别名的列。e、 g
CREATE TABLE Songs (id INTEGER PRIMARY KEY, .....
或者,在获取列表视图的数据时,您可以选择使用rowid作为id
,例如
SELECT *, rowid AS id FROM Songs
如何从Listview中提取id的细节取决于Listview的来源
您还可以更改getLyms
以返回带有歌词的字符串,例如:-
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;
}
要获取字段信息,请执行以下操作:
if (res.getColumnIndex("Your field name") != -1) {
str = cursor.getString(res.getColumnIndex("Your field name"));
}