Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事情?

Cursor+Claude-3.5生成Android app Cursor 与 Claude 携手,构建完整流程,助力开发者从概念快速迈向实现,大幅缩短开发周期,打造更优质创新的 Android 应用 阅读详情
AI摘要

本文深入浅出地解析了Android中Cursor的概念及其应用场景,包括如何获取Cursor对象、遍历内容的方法及注意事项。

一:Cursor到底是什么?

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

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


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


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


一般情况下:

SQLiteDataBase db;

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

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

每行的集合....

每行的集合....

每行的集合....

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

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




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

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

比如我要在这个表中找gender为男的,那么获得到的cursor就包含了张三行,赵六行,孙七行。


三:我在遍历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)。




Android中Cursor的使用 在Android开发中,我们经常需要与数据库进行交互,而Cursor提供了一种方便的方式来处理查询结果集。上述代码创建了一个名为"mydatabase.db"的数据库,并在其中创建了一个名为"mytable"的表,表中包含"id"和"name"两列。在示例中,我们选择了所有列,没有设置选择条件和排序方式。然后,我们可以通过索引获取相应的列值,并对结果进行处理,例如打印或展示在用户界面上。最后,我们记得在使用完Cursor和数据库后关闭它们,以释放资源。上述代码中,我们首先获取可读的数据库实例,然后使用。 阅读详情

相关推荐

Android的CursorLoader使用指南

CursorLoader是Android Support库中的一个类,用于在后台线程加载数据库查询结果。它提供了自动管理Cursor的能力,包括查询数据、监视数据变化以及处理数据加载过程中的状态管理。使用CursorLoader可以简化开发过程,提高应用的性能和响应能力。本文介绍了Android中CursorLoader的用法。通过使用CursorLoader,可以方便地进行异步加载和管理数据库查询结果。通过实现LoaderCallbacks接口的方法,可以处理数据加载过程中的回调事件。

TechGlide的博客 602

Android中的Cursor

Cursor 1. 什么是Cursor Cursor就是游标,可以理解为我们在输入文本框闪烁的光标,标记我们要输入的位置。那什么是光标呢 这个一闪一闪的竖线就是光标。而我们的Cursor也是用来标记位置,标记我们要读取数据的位置。 2. Cursor对象获取 我们这里用内容提供者进行举例。 //指定获取字段 String[] columns = new String[]{MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColu

weixin_47323733的博客 6038

Gazebo仿真平台模型搭建与修改

ROS里踩过的坑(一)Gazebo仿真平台模型搭建与修改文件讲解Models 文件World文件Launch文件模型编辑可视化编辑配置文件编辑模型展示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...

Redglass的博客 1万+

cursor android,Android Cursor用法

Cursor作用类似于java中resultSet,把查询到的结果集封装在一个Cursor对象当中。cursor就像是结果集上的一个游标,可以向前向后移动。常用方法:moveToFirst(); moveToFirst(); 移动到第一行或最后一行moveToNext();MoveToPrevious() 向前移动一行或向后移动一行moveToPosition(positon) 移动到指定位置注:...

weixin_42549496的博客 5986

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 433

Conda安装cuda指定版本遇到的一个大坑,导致pytorch无法使用cuda且nvcc -V显示错误的cuda版本

24年3月份的时候用conda install nvidia/label/cuda-11.x.x::cuda还挺正常的,能直接安装11.x.x版本的cuda,我还安利给同学用。但现在5月份不知道为什么这些命令都只会安装最新的cuda12.4,不知道是我哪里设置有问题还是官网的安装目录里的环境配置换了?我在三台不同的服务器上都尝试了安装不同版本的cuda,但最后安装下来的都是12.4版本。

weixin_43933424的博客 8892

【转载】Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事情?

安卓SQLite使用的时候遇到光标Cursor,这Cursor到底是什么?

7zwang的博客 1428

STM32F103C8T6飞控入门:从零开始,用HAL库和MPU6050搭建你的第一架四轴无人机

本文详细介绍了如何使用STM32F103C8T6和MPU6050模块从零开始搭建四轴无人机飞控系统。通过硬件选型、电路设计、HAL库配置、姿态解算算法实现以及PID控制等步骤,帮助创客和嵌入式爱好者快速入门飞控开发。文章还提供了实用的调试技巧和常见问题解决方案,适合想要掌握四旋翼无人机核心技术的开发者。

weixin_42524750的博客 266

转载:Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事情?

原创 Android中的【Cursor】类总结 ...

qq_39618369的博客 449

基于MATLAB的基本数字调制解调系统的设计

基于MATLAB的基本数字调制解调系统的设计一、摘要现代通信系统要求通信距离远、通信容量大、传输质量好,作为其关键技术之一的调制解调技术一直是人们研究的一个重要方向。本文以MATLAB为软件平台,充分利用其提供的通信工具箱和信号处理工具箱中的模块,对数字调制解调系统进行Simulink设计仿真,并且进行误差分析。调制与解调是通信系统中十分重要的一个环节,针对不同的信道环境选择不同的调制与解调方式可...

m0_55395440的博客 5549

PySpark机器学习生产化陷阱:跨节点依赖问题的7种解决方案

隐式依赖陷阱使用ldd解决方案:在基础镜像中预装和路径冲突终极解法依赖树瘦身技巧用conda-tree可减少40%环境体积PySpark机器学习生产化的核心矛盾在于分布式环境的确定性与灵活性不可兼得。轻量级方案(1-3)牺牲一致性换取灵活性重量级方案(4-6)牺牲灵活性换取确定性混合方案(7)针对特殊场景补充正如某AI平台架构师所言:“环境一致性不是技术问题,而是工程纪律问题选择适合团队当前阶段的方案,建立严格的依赖管理流程,才能让PySpark真正扛起生产环境的大旗。

datacanvas2426的博客 909

对Android中的Cursor一些浅显见解

之前一直搞不懂Cursor的数据模型是怎么样的,等到看到下面别人博客中把Cursor比作.net中的DataReader才明白,原来是这么回事。但是没 学过.Net的同志可能还是不明白Cursor是怎么一回事,怎么取它的数据,和它的数据为什么那么取。 上面的表代表的是一个cursor对象。 当我们用query方法查询到的是一个指向cursor对象第一行的前面一行数据,即上图中的...

kite5121314的专栏 1万+

190、LLC谐振变换器的样机调试实战(问题定位)

这篇实战笔记总结了LLC谐振变换器样机调试中的五大典型问题及解决方案:1)空载炸机源于谐振电容纹波电流能力不足;2)轻载啸叫因控制环路不稳定,需调整突发模式阈值;3)MOSFET过热由死区时间不当导致,需精确优化实现ZVS;4)输出纹波大由PCB布局耦合引起,需优化共模抑制;5)启动过冲需延长软启动时间。作者强调调试需结合示波器、热成像仪等工具,理论计算与实测并重,并详细记录每次参数调整。文章指出LLC调试是不断试错的过程,关键是通过现象分析本质原因。

Jack010169的博客 48

【跟着Cursor开发安卓APP】2. 搭建基础框架和首页

在这几天的工作中,我完成了安卓APP的基础框架和首页搭建。首先,我基于已完成的苹果手机和手表端代码,让Cursor生成了安卓APP的开发计划文档,并参考该文档进行开发。在Android Studio中创建了项目,并建立了基础目录结构。首次编译后,解决了编译过程中的报错问题,并优化了APP首页的功能及UI。由于我之前已完成iOS和iWatch的小兔计数项目,因此只需基于现有项目开发对应的安卓版本。我让Cursor理解小兔计数的开发文档,并制定了安卓App的开发计划。开发计划文档帮助Cursor更好地理解项目整

2501_92095624的博客 1775

Cursor使用教程:用 Cursor 创建第一个 Java 项目

Cursor是一款基于VS Code的AI编程编辑器,专为开发者设计。安装前需确保JDK 8+、Maven 3.8+等环境配置,支持Windows系统。编辑器提供中文界面选项,可通过扩展市场安装语言包。创建Java项目支持手动和AI提示词两种方式:手动需创建目录结构并编写代码;AI方式则通过自然语言描述快速生成项目框架和代码。标准Java项目包含src/main/java主代码目录、src/test/java测试目录及pom.xml等配置文件。Maven项目中,pom.xml是核心配置文件,管理项目依赖与构

博客 3547

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android开发中的cursor

关于 Cursor,在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: Cursor 是每行的集合。 使用 moveToFirst() 定位第一行。 你必须知道每一列的名称。 你必须知道每一列的数据类型。 Cursor 是一个随机的数据源。 所有的数据都是通过下标取得。 3. 关于 Cursor 的重要方法: close() 关闭游

贵贵博客 1298

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android Cursor的一些浅显见解

一、Cursor的数据模型 之前一直搞不懂Cursor的数据模型是怎么样的,等到看到下面别人博客中把Cursor比作.net中的DataReader才明白,原来是这么回事。但是没 学过.Net的同志可能还是不明白Cursor是怎么一回事,怎么取它的数据,和它的数据为什么那么取。 上面的表代表的是一个cursor对象。 当我们用query方法查询到的是一个指向cursor对象第一行的前面一行数据,即上图中的空行。所以我们使用cursor.moveToNext()方法时,是指向cursor..

残风乱了温柔的博客 1762

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android中Cursor类方法

使用过 SQLite数据库的童鞋对 Cursor 应该不陌生,加深自己和大家对Android 中使用 Cursor 的理解。 关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: Cursor 是每行的集合。使用 moveToFirst() 定位第一行。你必须知道每一列的名称。你必须知道每一列的数据类型。Cursor 是一个随机的数据源。所有的数据都是通过下标取得。 关于 Cursor 的重要方法: ·close()——关闭游标,释放

indeedes的博客 2408

Android中Cursor的用法

在使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: Cursor 是每行的集合。 使用 moveToFirst() 定位第一行。 你必须知道每一列的名称。 你必须知道每一列的数据类型。 Cursor 是一个随机的数据源。 所有的数据都是通过下标取得。 关于 Cursor 的重要方法: close() 关闭游标,释放资源 copyString

在路上 2333

android Cursor 使用方法

android Cursor 使用方法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terryblog.blog.51cto.com/1764499/344172 使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合

mal327的专栏 1194

android光标Cursor

参考Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事情? Android Cursor 的使用细节 光标就是,我们在输入信息的时候看到的那个一闪一闪的短线,所以,我们也可以把游标理解成这个一闪一闪的短线。 我们是怎么获得Cursor对象的呢? 1.数据库的query方法 SQLiteDataBase db; Cursor cursor = db.query(各种参数...

skyang在路上 1071

Android中Cursor类的概念和用法

又是新的一天,加油!

xiao_彩笔的博客 1万+

Android cursor用法

使用过 SQLite 数据库对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合。 今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 Cursor 的理解。    关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:    Cursor 是每行的集合。 ...

weixin_30600503的博客 115

android中的Cursor类

使用过 SQLite 数据库的童鞋对 Cursor 应该不陌生,如果你是搞.net 开发你大可以把Cursor理解成 Ado.net 中的数据集合相当于dataReader。今天特地将它单独拿出来谈,加深自己和大家对Android 中使用 Cursor 的理解。 关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情:

wykwdy007的专栏 5603

Android中Cursor的作用

Android 使用的数据库是SQLite数据库,对于数据库记录的操作,可以使用Cursor(游标,其实是查询结果的集合)来进行。 1. 关于 Cursor 在你理解和使用 Android Cursor 的时候你必须先知道关于 Cursor 的几件事情: Cursor 是每行的集合。 使用 moveToFirst() 定位第一行。 你必须知道每一列的名称。 你必须知道每一列的数据类型。 Cur

Ada168855的专栏 2874
下一篇: Android开发中的事件分发机制梳理
george_zyf
博客等级 码龄11年 132粉丝 82原创
评论 23
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值