Android光标初始化



我设计了一个数据库。这是我的代码:

  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");
}

相关内容

最新更新