android报错:android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 8

一、前言:最近在学安卓SQLite包括数据库的增删改查,在操作到查询的时候报错了   android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 8。他是什么意思呢大概意思是android中数据库处理使用curson时,游标不是放在为0的下标,而是放在为-1的下标开始的,也就是说:“返回给curson查询结果时,不能够马上从cursor中提取值”。

二、解决方法

这是我之前的错误代码

  public List<User> queryAll(){
        List<User> list = new ArrayList<>();
        //执行记录查询动作,该语句返回结果集的游标
        Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null);
        //循环取出游标指向的每一条记录
        User user = new User();
        user.id = cursor.getInt(0);
        user.name = cursor.getString(1);
        user.age = cursor.getInt(2);
        user.height = cursor.getLong(3);
        user.weight = cursor.getFloat(4);
        //SQLite没有布尔类型,用0表示false,用1表示true
        user.married = (cursor.getInt(5) == 0) ? false :true;
        return list;
    }

修改过后的代码

    public List<User> queryAll(){
        List<User> list = new ArrayList<>();
        //执行记录查询动作,该语句返回结果集的游标
        Cursor cursor = mRDB.query(TABLE_NAME,null,null,null,null,null,null);
        //循环取出游标指向的每一条记录
        User user = new User();
        while (cursor.moveToNext()){
            user.id = cursor.getInt(0);
            user.name = cursor.getString(1);
            user.age = cursor.getInt(2);
            user.height = cursor.getLong(3);
            user.weight = cursor.getFloat(4);
            //SQLite没有布尔类型,用0表示false,用1表示true
            user.married = (cursor.getInt(5) == 0) ? false :true;
        }
        return list;
    }

三、总结:

应把获取的代码都放到while(curson.moveToNext()){ }中就不会出错了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值