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;
}