Java 游标上的非法状态异常
我在尝试读取SQLite数据库时遇到此错误 IllegalStateException:无法从CursorWindow读取第0行第1列。在从光标访问数据之前,请确保光标已正确初始化 读号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_
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
,等等
因此,为了解决问题,您可以:
- 不要尝试检索不属于结果的字段
- 在投影中也添加所需的字段
@佐伊是新来的,我错了。
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));
}