安卓开发:android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
错误描述:android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

安卓开发中,查询SQLite数据库后会返回一个 Cursor 对象,而出现以上这个错误大多是因为对 Cursor 理解存在一定误解。首先我们先来简单看一下 Cursor 的特点。Cursor 的工作特点:
文章正文图片
我们可以简单将查询出来的数据理解为以上图示的结构,而Cursor初始 “指向”的是 -1,每次访问一条数据Cursor位置向后移一位。正因为 Cursor 初始“指向”-1,所以我们查询单条数据时如果直接从Cursor获取数据,就会出现数组越界异常,正如错误提示中说的,size的确为1了,但是你想访问的位置是-1。

想要处理这个错误很简单,Cursor向后移动“一格”就好了嘛。

另外,我上面特别说明访问单条数据会出这个错,并不是说查询多条数据时不会出类似错误,只是出错机会较少,因为查询多条数据时,我们大多是用如下类似的循环结构访问的:
while (cursor.moveToNext()){
    //获取数据操作
    ... ...
}

写法比较固定,也和常规的数据库查询结果访问类似,一句cursor.moveToNext()就避免了问题的发生。

而访问单条数据的时候,多数人会认为只有一条数据,那直接访问就好了,于是直接从Cursor中取数据,于是悲剧来了。所以单条数据访问必须要套上if判断语句,这样,如果查询到了数据的话,cursor的位置就会从 -1 变为 0, 如果没有数据的话也不会从cursor中强行获取数据,避免了错误的发生:
//moveToNext()一样的效果,总之就是让Cursor指向正确位置而非 -1, 咋操作都行
if(cursor.moveToFirst()){  //单条这个操作不能少,否则必定报错.
    //获取数据操作
}

关于Android上SQLite的简单查询操作,我也将此次测试的工程文件上传了,需要的友友可自行下载。

APK文件点此下载
AndroidStudio 工程文件点此下载


 
It's
欢迎访问本站,欢迎留言、分享、点赞。愿您阅读愉快!
*转载请注明出处,严禁非法转载。
https://www.devsong.org
QQ留言 邮箱留言
头像
引用:
取消回复
提交
涂鸦
涂鸦
热门