SQLite游标无法正常循环 - Android

时间:2012-06-08 18:29:28

标签: android sqlite cursor

这是方法:

 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行,第-1行。确保光标已初始化。”

第384行标在上面。 你能找到我在这里找不到的东西吗?

2 个答案:

答案 0 :(得分: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!!! )

}

答案 1 :(得分: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();
    }