2012-06-08 2 views
0

Вот метод:SQLite Cursor Не Looping Правильно - Android

public ArrayList<Integer> getDays() { 
    Cursor c = database.rawQuery("SELECT * FROM debt;", null); 

    nameList = new ArrayList<String>(); 
    dayList = new ArrayList<Integer>(); 

    String indName[] = new String[c.getCount()]; 
    String indDay[] = new String[c.getCount()]; 

    int d = 0, j = 0, u = 0; 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     indName[j++] = c.getString(c.getColumnIndex("debt_name")); 
     indDay[d++] = c.getString(c.getColumnIndex("pay_day")); // line 384 
    } 

    for (String name : indName) { 
     if ((indDay[u] != "") || (indDay[u] != null)) { 
      dayList.add(Integer.valueOf(indDay[u++])); 

     } 
    } 
    c.close(); 

    return dayList; 
} 

Я получаю сообщение об ошибке в строке 384, которая говорит: «Не удалось прочитать строку 0, Col -1 Убедитесь, что курсор инициализируется. «.

Линия 384 обозначена выше. Вы можете найти что-то, что мне не хватает здесь?

+0

Чистый и восстановить ваш проект, а затем попробуйте еще раз и посмотреть, если ошибка указывает теперь к правильной линии ... –

+0

использование 'SELECT * FROM debt' удалите', ' –

+0

Я думаю, что ваш код абсолютно riht. –

ответ

2

удалить; от конца вашего запроса: SELECT * FROM debt

вызова этой линии:

//optional 
//"this" is your DBHELPER class 
SQLiteDatabase database = this.getWritableDatabase(); 

заменить (обозначение блока) с помощью этой

if(c.moveToFirst()){ 
    while(c.moveToNext()) { 
      indName[j++] = c.getString(c.getColumnIndex("debt_name")); 
      indDay[d++] = c.getString(c.getColumnIndex("pay_day")); 

     } (Line 386!!!) 

} 
+0

Я сделал это, и он все еще указывает на строку «indDay [d ++]». – KickingLettuce

+1

попробуйте использовать: c.getColumnIndex (0) или c.getColumnIndex (1) или другое значение int. Я думаю, что ваша проблема заключается в отсутствии правильной колонки «pay_day» –

+0

Вы абсолютно правы и меня на правильном пути. Pay_day на самом деле называется pay_date. очень плохая ошибка, я знаю. Благодаря! – KickingLettuce

0

поставил c.moveToNext();

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     indName[j++] = c.getString(c.getColumnIndex("debt_name")); 
     indDay[d++] = c.getString(c.getColumnIndex("pay_day")); // line 384 

    enter code here// c.moveToNext(); 
    } 
Смежные вопросы