java.lang.IllegalStateException: Couldn‘t read row 0, col -1 from CursorWindow.

一、问题:

android开发中Cursor使用时的错误。错误:java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.

二、情景:

android sql查询时,使用到了cursor对象。代码如下:

        if(cursor.moveToFirst()){
            do{
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String tel = cursor.getString(cursor.getColumnIndex("tel"));
                String remark = cursor.getString(cursor.getColumnIndex("remark"));
                String group = cursor.getString(cursor.getColumnIndex("group_lpcolumn"));
                int selectTemp = cursor.getInt(cursor.getColumnIndex("select_lpcolumn"));
                boolean select = true;
                if(selectTemp==0){
                    select = false;
                }
                User user = new User();
                user.setName(name);
                user.setTel(tel);
                user.setRemark(remark);
                user.setGroup(group);
                user.setSelect(select);
                arrayList.add(user);
            }while (cursor.moveToNext());
        }
        cursor.close();

出错的地方是

String group = cursor.getString(cursor.getColumnIndex("group_lpcolumn"));
int selectTemp = cursor.getInt(cursor.getColumnIndex("select_lpcolumn"));

《现在这是正确的代码》


这两行。因为我的User类中字段是group和select,所以原来写的代码是

String group = cursor.getString(cursor.getColumnIndex("group"));
int selectTemp = cursor.getInt(cursor.getColumnIndex("select"));

《这是错误的代码》

就报上面那个错误了。

这是因为我创建库、存储数据等的时候使用的LitePal开源库,而group和select是sql关键字或保留字段,应该是litePal做了处理。导致cursor.getColumnIndex("group")返回的值是-1。

三、解决方式:

可以使用cursor的方法getColumnIndexOrThrow(String),此方法会输出更清楚的错误原因。更清楚的错误提示如下:

java.lang.IllegalArgumentException: column 'group' does not exist. Available columns: [id, group_lpcolumn, name, remark, select_lpcolumn, tel]
    at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:352)

那么找到原因就好修改了。

所以数据库字段尽量不要使用关键字或保留字为好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值