Ошибка при доступе к элементам курсора - PullRequest
1 голос
/ 27 февраля 2012

Я пытаюсь получить все IDs в таблице курсором. В таблице 4 строки, и когда я пытаюсь получить доступ к курсору по любому индексу, кроме 0, приложение вылетает.

Ребята, проблема все еще существует, и даже c.getInt (0) не работает ... Я действительно не знаю, где моя ошибка ???

logcat также предполагает, что ошибка может быть из

Toast.makeText(getApplicationContext(), "id="+dbd.getIDs()[0], Toast.LENGTH_SHORT).show();

Я имею в виду c.getint(0) возвращает идентификатор, c.getint(2) возвращает ошибку. Вот код:

public int []getIDs() {
    SQLiteDatabase db = this.getReadableDatabase();
    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT " + BaseColumns._ID + " FROM Demo ", null);

    int []r = new int[c.getCount()];
    c.moveToFirst();

    do{
        r[c.getPosition()] = c.getInt(0); 
    }while(c.moveToNext());

    c.close();
    db.close();
    return r;       
}

Ответы [ 4 ]

1 голос
/ 27 февраля 2012

Ваш выбор - проекция на столбец идентификатора (выберите столбцы из ..., столбцы - это идентификаторы столбцов, которые вас интересуют, и вы указали только один). Таким образом, ответ имеет только один столбец, а именно идентификатор. Любой доступ к столбцам с индексом> 0 не будет работать.

Чтобы получить доступ к другим столбцам, назовите их в проекции в вашем запросе.

0 голосов
/ 27 февраля 2012

Если вы выбираете подходящие данные, ваша проблема в том, что вы не готовите курсор для повторения.

Перед повторением вызовите:

c.moveToFirst();

Вот так:

int []r = new int [c.getCount()];
c.moveToFirst();
    do{
        r[c.getPosition()] = c.getInt(0);
    }while(c.moveToNext());

    c.close();
    db.close();
    return r;   

Это хорошо указано в LogCat.Я не могу вспомнить, как это написано, но сообщение очень наводит на размышления.Пожалуйста, опубликуйте как можно больше журнала, особенно хорошие биты.

Кроме того, я изменил 'r', чтобы он был массивом.Вы только возвращали значение последней строки.

0 голосов
/ 27 февраля 2012

Вы можете представить Курсор в виде таблицы. Есть строки и столбцы. И курсор указывает на конкретную строку в этой таблице. Таким образом, чтобы получить все идентификаторы, вы должны перемещаться по всем строкам.

c.getInt(ind) В этом выражении указатель указывает на столбец с указателем инд. Таким образом, в вашем коде вы пытаетесь получить второй и третий столбец, и в соответствии с вашим кодом эти столбцы отсутствуют.

Чтобы получить правильный код, вы должны создать цикл и пройти все строки вашего курсора. Также вы должны использовать c.getInt(0), чтобы получить значения столбцов.

0 голосов
/ 27 февраля 2012

c.getInt(0) возвращает только значение первого столбца из текущей строки.

попробуйте этот код:

do{
int r = c.getInt(0);
Log.d("Your class name","id value = "+r);
}while(c.moveToNext());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...