我设计了一个数据库。这是我的代码:
Cursor cursor =database.query(ColumnID.AGENT_TABLE,null,null,null,null,null,null);
while (cursor.moveToNext()) {
County county = new County();
county.setId(cursor.getString(cursor
.getColumnIndex(ColumnID.ID)));
county.setAgent_Name(cursor.getString(cursor
.getColumnIndex(ColumnID.AGENT_NAME)));
county.setAddress_Line_1(cursor.getString(cursor
.getColumnIndex(ColumnID.ADDRESS_LINE_1)));
countyList.add(county);
}
不幸的是,我得到了这个错误:
Caused by: 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 Cursor初始化
Cursor cursor =database.query(ColumnID.AGENT_TABLE,null,null,null,null,null,null);
if (cursor.getCount() > 0)
{
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
County county = new County();
county.setId(cursor.getString(cursor
.getColumnIndex(ColumnID.ID)));
county.setAgent_Name(cursor.getString(cursor
.getColumnIndex(ColumnID.AGENT_NAME)));
county.setAddress_Line_1(cursor.getString(cursor
.getColumnIndex(ColumnID.ADDRESS_LINE_1)));
countyList.add(county);
cursor.moveToNext();
}
}
我不确定您是因为数据表中没有记录并且您试图在空集上移动ToNext()而收到错误,还是因为您访问查询时没有结果。
如果是前者:错误似乎是因为光标中没有记录,当您尝试moveToNext()时,记录不存在。它是一个空指针异常的SQLite版本(有点)。
相反,请尝试:
Cursor cursor =database.rawQuery("SELECT * FROM " + ColumnID.AGENT_TABLE);
cursor.moveToFirst();
//this checks to make sure you don't have an empty set
if(!cursor.isAfterLast())
{
do{
County county = new County();
county.setId(cursor.getString(cursor
.getColumnIndex(ColumnID.ID)));
county.setAgent_Name(cursor.getString(cursor
.getColumnIndex(ColumnID.AGENT_NAME)));
county.setAddress_Line_1(cursor.getString(cursor
.getColumnIndex(ColumnID.ADDRESS_LINE_1)));
countyList.add(county);
}while(cursor.moveToNext());
} else{
Log.v("MyTag", "There are no countries in the data set");
}