在学习android内容提供器时,在查询数据的操作时对代码Cursor对象的遍历逐个取出数据有些疑惑。
有些遍历是采用如下方法一:
if(cursor.moveToFirst()){
do{
//取出数据
} while(cursor.moveToNext());
}
有些遍历则是采取如下方法二:
if(cusor!=null){
while(cursor.moveToNext()){
//读取数据
}
}
为什么有的方法先指向第一条记录再读取数据而有的方法则直接使用cursor.moveToNext()方法呢?
原来查询得到的cursor是指向第一条记录之前的,因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。
源码中这些moveXXX其实都是通过moveToPosition来实现的,而记录position的是一个整型变量mPos。当moveXXXX返回false的时候,mPos会被置为-1,也就是回到了初始状态,指向第一条记录之前。
//结论部分来源于以下博文
http://blog.csdn.net/kerlw/article/details/6126448