2015-11-07 4 views
0

Я новичок в Android Studio, и это мое первое приложение в целом, где я работаю с подключением к базе данных, поэтому я просто могу принципиально не понимать, как работает курсор.Android Studio - Cursor.getString() throwing exception

Я запрашиваю свою базу данных, и тесты показывают, что запрос успешный, в частности метод getCount() возвращает 2 как количество строк, содержащихся в объекте курсора. Однако, когда я вызываю метод getString(), он генерирует исключение вместо возврата данных столбца.

Что-нибудь выскочит сразу, что может быть неправильно с этим кодом?

public void GetFacts(View v) { 

    Cursor cursor = database.query(ExternalDbOpenHelper.TABLE_NAME, 
      null, "valueRange = 'MEDIUM'", null, null, null, null); 

    // Log number of rows from query 
    Log.d("CursorTest", "Row count: " + cursor.getCount()); 

    try { 
     // get data from "factName" column of database 
     String columnName = cursor.getColumnName(0); 
     Log.d("CursorTest", "Column Name: " + columnName); 

     String data = cursor.getString(cursor.getColumnIndex(columnName)); 

    } catch(Exception e) { 
     // Log exception thrown 
     Log.d("CursorTest", "Error getting data: " + e.getMessage()); 

    } 
} 

И журнал дает мне следующее:

D/CursorTest: Количество строк: 2

D/CursorTest: Колонка Название: factName

D/CursorTest : Ошибка получения данных: запрошенный индекс -1, с размером 2

+0

Задавая вопрос об исключении или регистрации один, убедитесь, чтобы сообщить ** тип ** за исключением, например, CursorIndexOutOfBoundsException , а не только сообщение об исключении. Это самая важная информация для выяснения того, что пошло не так. Вы можете легко найти это, добавив исключение (ваш параметр 'e') в качестве третьего параметра в вызов' Log.d() '. – LarsH

ответ

1

Try, чтобы переместить курсор на первую позицию первого примера

cursor.moveToPosition(0); 
+0

Это то, что мне нужно, спасибо! –

+0

Голос будет отличным –

+0

Я пробовал голосовать, но они не будут отображать мой отзыв, пока я не получу 15 реп. –

1

Курсор инициализируется с индексом -1. Вам нужно позвонить moveToNext() или moveToPosition(int), чтобы установить его в положение с данными в нем.