Android CursorIndexOutOfBoundsException索引-1异常问题求解
异常原因
- Android 中
Cursor查询完成返回时,初始位置默认在-1(所有数据行之前的无效位置),此时直接调用getString()、getInt()等读取字段的方法,就会触发CursorIndexOutOfBoundsException,和你报错信息里的Index -1 requested完全匹配。 - 你报错信息里的
size of 1说明查询已经匹配到了1条符合条件的用户数据,只是没有将光标移动到有效数据行就读取内容才触发了异常。
修复方案
你需要先调用Cursor的位置移动方法,确认处于有效数据行后再读取字段,同时用完Cursor要主动关闭避免内存泄漏:
- 调用
moveToFirst()方法尝试将光标移动到第一条数据,该方法返回true说明存在有效数据可以读取 - 数据读取完成后调用
cursor.close()回收资源
修正后的业务代码如下:
TextView account = findViewById(R.id.txtUsernameAcc); DBH db = new DBH(accountActivity.this); Cursor cursor = db.displayUserInfo(loginActivity.accountName); // 先移动光标到有效位置再读取数据 if (cursor.moveToFirst()) { account.setText(cursor.getString(0)); } // 关闭Cursor释放资源 cursor.close();
如果后续需要遍历多条查询结果,替换为while(cursor.moveToNext())循环读取即可。
内容的提问来源于stack exchange,提问作者Wolo Lo
相关产品推荐
相关产品推荐

