java Cursor isAfterLast()到达最后一行时返回true
我想在包含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 楼答案
请注意
moveToNext()
返回一个boolean
,表示有下一个(true
),但如果为true,则返回一个,它移动光标。因此,在这种情况下,当您在c.moveToNext();
之后返回到while(!c.isAfterLast())
求值时,您已经位于最后一项(因此光标指向最后一行之后的位置)如果您的目标是遍历光标,则可以执行以下操作:
您可以查看相关的讨论here