首页 > 编程知识 正文

android cursor遍历,android cursor属性

时间:2023-05-06 02:09:01 阅读:213380 作者:3698

一:Cursor到底是什么?

网上很多博客都介绍了Cursor,介绍了各种概念,各种原理。可是有的小伙伴可能还是很懵逼,这特码的到底都是什么。

刚开始接触Cursor的时候也是一脸懵逼,看到人家说这个方法是在干什么干什么,可以脑子里没有一个生动形象的动作过程就感觉理解不了。Cursor是什么呢?是游标,可能有的小伙伴不知道什么是游标,看下图。


OK了吧,是不是OK了,光标是什么意思还用解释吗,我们在输入信息的时候能看到的那个一闪一闪的短线,那不就是光标吗,所以呢,我们也可以把游标理解成这个一闪一闪的短线。


二:我们是怎么获得Cursor对象的呢?


一般情况下:

SQLiteDataBase db;

Cursor cursor = db.query(各种参数);

这时,就出现了网上的解释了,说cursor是每行的集合。

每行的集合....

每行的集合....

每行的集合....

其实开始看到这几个字的时候我是认为我理解的,可是继续一寻思,可能就会有这种疑惑,它是把一行中的所有内容装到集合中呢,还是把所有行装到一个集合中啊,而且这个行是什么啊等等一系列神勇的飞鸟问题。

现在先解释一下SQLite数据库中是怎么存放数据的,是以表的形式存放的,看这个表Student。




这里的id,name,age,gender,school,city就是列名,name这一列下面就对应着一个对象的name属性。所以我们能看到,一行的意思就是我们存放的一个对象了,比如xdddqc这一行,名字是xdddqc,在年龄这一列上是5,那么这个name属性为xdddqc的对象,它的age的属性就为5。

所以这个每行的集合的意思,是获得的满足条件(就是我们query方法中传入的条件参数)的所有行。

比如我要在这个表中找gender为男的,那么获得到的cursor就包含了xdddqc行,彪壮的爆米花,受伤的鱼。


三:我在遍历cursor内容的时候,为什么要先moveToFirst()?


我们采用反证法,我们不进行moveToFirst()操作,我们获取游标对象后,直接输出它当前的position值




可以看到,直接输出的position的值是-1,也就相当于我们刚开始获得它的时候,它是在第0行上面闪动呢。


所以我们使用moveToFirst后在输出position就会发现position=0了,使用moveToNext也可以。


四:moveToNext如何得知是否已经遍历完毕呢?


我们翻看源码,会发现moveToFirst,moveToNext,moveToLast,moveToPrevious等最后都会执行到这个方法


图中说的:这个对象在初始化的时候,指的就是当前页面的那个对象。mPos=-1被写在一个空参构造方法里了。

看源码的时候也能发现:

moveToFirst调用的是moveToPosition(0)

moveToNext调用的是moveToPosition(mPos+1)

所以如果是第一次调用的话,这两句话的意思是一样的(开始mPos=-1)。




版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。