2012-02-27 3 views
1

Я пытаюсь получить все 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;  
} 
+0

ndroid.database.CursorIndexOutOfBoundsException: Индекс 0 просил, с размером 0 02-27 15: 27: 02.957: E/AndroidRuntime (1388): в Вытяните вашу базу данных от эмулятора с DDMS. Проверьте его с помощью Firefox SQL Manager, чтобы проверить его содержимое и проверить свои SQL-запросы. –

+0

Ваш курсор пуст. проверьте данные табуляции. – Natali

+0

ohh, да, это было пусто, я отключил функцию заполнения таблицы. – LetsamrIt

ответ

0

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

попробовать этот код:

do{ 
int r = c.getInt(0); 
Log.d("Your class name","id value = "+r); 
}while(c.moveToNext()); 
+0

Я пробовал следующее, но все же у меня такая же ошибка: – LetsamrIt

+0

Я отправил свои attemps выше, но я все же дал ту же ошибку, даже c .getInt (0) дает также eror !!!!! 1 – LetsamrIt

+0

попытайтесь изменить c.getInt (0); c.getInt (c.getColumnIndex (BaseColumns._ID)); – Natali

1

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

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

+0

проблема в том, когда я пытаюсь получить доступ к c.getInt (1) или c.getInt (2) App.Crashs ... только c.get (0) работает – LetsamrIt

+0

Да, выберите A из таблицы ... всегда будет доставлять строки только с одним столбцом (независимо от количества столбцов в таблице, при условии, что есть столбцы A), и c.getInt (1) выйдет из строя. При выборе A, B из таблицы ... будет поставляться по два столбца на строку, а c.getInt (1) будет работать (если B является целым числом), но c.getInt (2) выйдет из строя. Если вам нужны все столбцы, вам нужно их назвать или использовать select * from table ... – Stefan

0

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

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

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

0

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

Перед перебираете, звоните:

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

я изменил код ... к сожалению, ошибка все еще существует – LetsamrIt

+0

опубликовать полный logcat –

+0

ndroid.database.CursorIndexOutOfBoundsException: индекс 0 запрошен, с размером 0 02-27 15: 27: 02.957 : E/AndroidRuntime (1388) –

Смежные вопросы