Android 使用游标从列值获取数据到活动sqlite

Android 使用游标从列值获取数据到活动sqlite,android,sqlite,cursor,Android,Sqlite,Cursor,我正在创建一个连接到数据库的歌曲库。数据以一种形式(标题、歌词、urldelvideo)存储,并添加到仅显示标题和id的listview中 当选择listview项目时(在listview中,它只显示标题),它会将我发送到一个带有两个按钮的活动,以选择查看歌词或查看视频的url 如何将存储的信息传递给每个项目的活动 在DBHelper中,我有以下代码来获取歌曲的歌词: public Cursor getLyrics(){ SQLiteDatabase db = this.getWrita

我正在创建一个连接到数据库的歌曲库。数据以一种形式(标题、歌词、urldelvideo)存储,并添加到仅显示标题和id的listview中

当选择listview项目时(在listview中,它只显示标题),它会将我发送到一个带有两个按钮的活动,以选择查看歌词或查看视频的url

如何将存储的信息传递给每个项目的活动

在DBHelper中,我有以下代码来获取歌曲的歌词:

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"));
   }