【问题标题】:Get data from column value using cursor to activity sqlite使用游标从列值获取数据到活动 sqlite
【发布时间】:2018-10-14 07:37:49
【问题描述】:

我正在创建一个连接到数据库的歌曲库。数据存储在表单中(标题、歌词、urldelvideo)并添加到仅显示标题和 ID 的列表视图中。

选择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);

因为我得到了每个项目中第一个项目的歌词...

【问题讨论】:

    标签: android sqlite cursor


    【解决方案1】:

    您需要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;
    } 
    

    【讨论】:

      【解决方案2】:

      获取字段信息的方法是:

      if (res.getColumnIndex("Your field name") != -1) {
           str = cursor.getString(res.getColumnIndex("Your field name"));
         }
      

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 2021-09-24
        • 2018-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多