我想在带有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?
答案 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。