bool android.database.Cursor.moveToNext()文档说:

http://developer.android.com/reference/android/database/Cursor.html#moveToNext%28%29

将光标移到下一行。

如果光标已经超出结果集中的最后一个条目,则此方法将返回false。

但是,我的书说要执行以下操作以从游标中提取数据:

游标myCursor = myDatabase.query(...);
如果(myCursor.moveToFirst()){
做 {
int值= myCursor.getInt(VALUE_COL);
//使用值
} while(myCursor.moveToNext());
}


谁是对的?这些都不是真的。如果看不到矛盾,可以想象一下myCursor从查询中返回了1行。对getInt()的第一次调用将起作用,但随后moveToNext()将返回true,因为它尚未“已经”经过结果集中的最后一个条目。因此,现在光标将经过最后一个条目,而对getInt()的第二次调用将执行未定义的操作。

我怀疑文档有误,应改为:

如果光标“已经”位于结果集中的最后一个条目,则此方法将返回false。

在moveToNext()方法返回false之前,光标必须已经是PAST(不是AT)的最后一个条目了吗?

请不要吃蛇

最佳答案

API的逐字记录:



因此,这意味着:

第一行中的游标-> moveToNext()->第二行中的游标->没有第二行->返回假

如果需要详细信息,请转到源:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/database/AbstractCursor.java#AbstractCursor.moveToNext%28%29

public final boolean moveToNext() {
  return moveToPosition(mPos + 1);
}

public final boolean moveToPosition(int position) {
    // Make sure position isn't past the end of the cursor
    final int count = getCount();
    if (position >= count) {
        mPos = count;
        return false;
    }

10-08 18:34