游标循环迭代不显示第一个值

时间:2011-03-18 14:21:23

标签: java android cursor

所以,我有一个查询返回一个带有所有值的Cursor(我用cursor.getCount()确认了这一点,其中返回的int等于数据库中的记录数),但由于某种原因,无论迭代什么-loop我写的我似乎永远无法检索列表的第一个值。

private void addAllUnsentCrapportsToList() {
    mDbAdapter.open();
    Cursor cursor = mDbAdapter.getAllCrapports();
    cursor.moveToFirst();
    String text = "";
    while(cursor.isAfterLast() == false){
        text = text
                + "typ: " + cursor.getString(cursor.getColumnIndex(DbAdapter.CRAPPORT_KEY_GARBAGETYPE))
                + " kommentar: " + cursor.getString(cursor.getColumnIndex(DbAdapter.CRAPPORT_KEY_COMMENT))
                + "\n";
        cursor.moveToNext();
    }

    unsentCrapportList.setText(text);
}

这段代码显示所有值,不包括第一个。我究竟做错了什么?我尝试了很多种方法,包括同时,等等,但总是遇到同样的错误。

我错过了什么?

4 个答案:

答案 0 :(得分:1)

使用

可能更好
if (cursor.moveToFirst()) {
    while (cursor.moveToNext()) {
        // Your code
    }
}

答案 1 :(得分:1)

我没看到你的代码有什么问题。那么也许你没有从db得到第一个值?您是否尝试在cursor.moveToFirst();之后打印数据以查看哪个是第一个元素?

答案 2 :(得分:1)

事实证明代码没有任何问题。我不得不在Eclipse中进行“项目清理”,然后重新启动模拟器。无论如何,感谢所有答案。

答案 3 :(得分:0)

cursor.moveToFirst();
while (cursor.moveToNext()) {
    // Your code
}

这从未让我失望过。试一试,看看它是怎么回事?

使用LOG进行一些日志记录以查看您获得的内容并查看数据库的外观 http://sourceforge.net/projects/sqlitebrowser/

编辑:顺便说一下,你没有使用startManagingCursor(cursor);的任何特殊原因?可能不会导致错误,只是想知道,因为它似乎很方便。