有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    如果您的目标是遍历光标,则可以执行以下操作:

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

    您可以查看相关的讨论here