有时候很小的一个马虎,就会导致很多错误。近来在做项目的时候,遇到如下异常:


java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow.  Make sure the Cursor is initialized correctly before accessing data from it.


插入数据库的操作如下:

ContentResolver resolver = mActivity.getContentResolver();ContentValues values = new ContentValues();String extInfo = "sth";values.put(MyContract.EXT_INFO, extInfo);resolver.insert(MyContract.MSG_URI, values);

查询数据库的操作如下:

Cursor cursor = mService.getContentResolver().query(MyContract.MSG_URI, null, MyContract.MSG_ID + "=?", new String[] { msgId }, null);String extInfo = cursor.getString(cursor.getColumnIndex(MyContract.EXT_INFO));

此时会报错,问题出现在这一行:

cursor.getColumnIndex(MyContract.EXT_INFO)


经过debug后发现,
cursor.getColumnIndex(MyContract.EXT_INFO)
返回的值是-1,即没找到这个字段。


经过分析,发现MyContract.EXT_INFO的值是

public static final  String EXT_INFO ="ext_info ";
这里多了一个空格,所以导致插入数据库的时候没问题,查询数据库的时候找不到。我想这应该是Android的一个bug,即插入操作是按照变量EXT_INFO的字段名(包含一个空格)插入的,调用getColumnIndex(MyContract.EXT_INFO)方法的时候去掉了变量EXT_INFO的空格。


更多相关文章

  1. Android(安卓)repo 出现error.GitError: manifests rev-list ('^
  2. Android(安卓)-- sqlite数据库随apk发布
  3. android 应用名称排序
  4. android(11)_文件操作读取模式
  5. Android(安卓)sqlit java层源码分析
  6. [置顶] Android(安卓)SQlite使用实践Demo
  7. Android(安卓)startActivityForResult的使用
  8. android空指针的bug
  9. XXXX软件Android平台移植Porting说明书

随机推荐

  1. [置顶] 如何在Android应用中加入广告
  2. 啥是佩奇?打造Android界佩奇
  3. Android绘制文本基本概念之- top, bottom
  4. android 6.0获取mac 地址都是02:00:00:00
  5. Android(安卓)能让你少走弯路的干货整理
  6. 我工作就是为了赚钱!
  7. android中使用okhttp实现文件上传
  8. 使用Android(安卓)Studio导入源码
  9. Android下Activity结束(finish())之后没有
  10. 通过SVN导入两个项目(从java移植到andorid