Java 游标上的非法状态异常

Java 游标上的非法状态异常,java,android,sqlite,Java,Android,Sqlite,我在尝试读取SQLite数据库时遇到此错误 IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化 读号 public Cursor readNumber(SQLiteDatabase database) { String[] projections = {"id", DbContract.PHONE_NUMBER}; return (database.query(DbContract.TABLE_

我在尝试读取SQLite数据库时遇到此错误

IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化

读号

public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {"id", DbContract.PHONE_NUMBER};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}
这是我的数据库

private static final String CREATE = "create table " + DbContract.TABLE_NAME +
        "(id integer primary key autoincrement,"
        + DbContract.ITEMID + " text, "
        + DbContract.PHONE_NUMBER + " text, "
        + DbContract.CALL_TYPE + " text, "
        + DbContract.CALL_DATE + " text, "
        + DbContract.CALL_DURATION + " text, "
        + DbContract.SYNC_STATUS + " text)";

在由
readNumber
call创建的投影中,只返回
id
PHONE\u NUMBER
列。可能
DbContract.ITEMID
不等于
id
,当尝试在光标中查找
DbContract.ITEMID
时,找不到它。要解决此问题,您需要在
readNumber
方法中使用
ITEMID
,例如:

public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {DbContract.ITEMID, DbContract.PHONE_NUMBER};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}
另一个问题是您也在尝试访问其他字段,如:
CALL\u TYPE
CALL\u DATE
,等等

因此,为了解决问题,您可以:

  • 不要尝试检索不属于结果的字段
  • 在投影中也添加所需的字段

发现问题: 我试图在readNumber方法中访问项目中未添加的列,添加这些投影解决了问题

读号


@佐伊是新来的,我错了。
public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {DbContract.ITEMID, DbContract.PHONE_NUMBER};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}
    public Cursor readNumber(SQLiteDatabase database) {
    String[] projections = {
            DbContract.ITEMID,
            DbContract.PHONE_NUMBER,
            DbContract.CALL_TYPE,
            DbContract.CALL_DATE,
            DbContract.CALL_DURATION};
    return (database.query(DbContract.TABLE_NAME, projections, null, null, null, null, null));
}