Получить данные из значения столбца с помощью курсора на активность sqlite - PullRequest
0 голосов
/ 04 мая 2018

Я создаю библиотеку песен, подключенную к базе данных. Данные хранятся в форме (название, текст песни, urldelvideo) и добавляются в список просмотра, который показывает только заголовок и идентификатор.

При выборе элемента просмотра списка (в просмотре списка он показывает только заголовок) он отправляет меня на занятие с двумя кнопками для выбора, чтобы увидеть текст песни или просмотреть 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);

Потому что я получаю текст первого предмета в каждом предмете ...

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Получить информацию о поле можно с помощью:

if (res.getColumnIndex("Your field name") != -1) {
     str = cursor.getString(res.getColumnIndex("Your field name"));
   }
0 голосов
/ 04 мая 2018

Вам нужно 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;
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...