Cursor isAfterLast()在到达最后一行时返回true

时间:2016-05-02 20:16:24

标签: java android sql cursor

我想在带有2行数据的表上迭代游标。我的第一次尝试是:

c.moveToFirst();
while(!c.isAfterLast()){
//this code runs once
c.moveToNext();
}

但是在调试之后我注意到我错过了我的数据的最后一行。这是因为当mPos变量在计数器中等于mCount时,while循环结束。用下面的代码替换上面的代码后,问题就解决了:

c.moveToFirst();
do{
//this code runs twice
}while(c.moveToNext())

基本上在第一种方法中,while循环比第二种方法少运行1次。是不是isAfterLast应该只在光标通过最后一行后返回true?

1 个答案:

答案 0 :(得分:1)

请注意,moveToNext()会返回boolean,表示有下一个(true),但ALSO,如果为true - 它会移动光标。因此,在这种情况下,当您在while(!c.isAfterLast())之后返回评估c.moveToNext();时,您已经在最后一项(因此光标指向最后一行之后的位置。

如果您的目标是遍历光标,那么您可以这样做:

while (c.moveToNext()) {
  //do whatever with your data - like 
  //String value = c.getString(c.getColumnIndex("SOME_COLUMN_NAME"));
}

您可以查看相关讨论here