У меня есть следующий код:
private Cursor query(String selection, String[] selectionArgs,
String[] columns, String tableName) {
/*
* The SQLiteBuilder provides a map for all possible columns requested
* to actual columns in the database, creating a simple column alias
* mechanism by which the ContentProvider does not need to know the real
* column names
*/
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(tableName);
Cursor cursor = builder.query(mDatabase, columns, selection,
selectionArgs, null, null, null);
if (cursor == null) {
return null;
} else if (!cursor.moveToFirst()) {
cursor.close();
return null;
}
return cursor;
}
public List<VEvent> getVEvents(int week, int year) {
String selection = KEY_WEEK + "=? AND " + KEY_YEAR + "=?";
String[] selectionArgs = new String[] { String.valueOf(week), String.valueOf(year) };
Cursor cursor = query(selection, selectionArgs, ALL_CALENDAR_COLUMNS, CALENDAR_TABLE_NAME);
List<VEvent> events = new ArrayList<VEvent>();
while (cursor != null) {
VEvent e = new VEvent();
try {
e.getProperties().add(new Uid(cursor.getString(1)));
e.getProperties().add(new DtStamp(cursor.getString(2)));
e.getProperties().add(new Organizer(cursor.getString(3)));
e.getProperties().add(new DtStart(cursor.getString(4)));
e.getProperties().add(new DtEnd(cursor.getString(5)));
e.getProperties().add(new Summary(cursor.getString(6)));
e.getProperties().add(new Location(cursor.getString(7)));
e.getProperties().add(new Description(cursor.getString(8)));
events.add(e);
} catch (ParseException ex) {
Log.v("getvevents", "parse exception : " + ex.getLocalizedMessage());
} catch (URISyntaxException ex) {
Log.v("getvevents", "uri exception : " + ex.getLocalizedMessage());
}
cursor.moveToNext();
}
return events;
}
Когда я вызываю getVEvents, я получаю следующее исключение:
09-08 11:03:10.121: ERROR/AndroidRuntime(2696): android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
09-08 11:03:10.121: ERROR/AndroidRuntime(2696): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
09-08 11:03:10.121: ERROR/AndroidRuntime(2696): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
09-08 11:03:10.121: ERROR/AndroidRuntime(2696): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
09-08 11:03:10.121: ERROR/AndroidRuntime(2696): at com.unibean.SettingsDatabase.getVEvents(SettingsDatabase.java:177)
Строка 177 соответствует
e.getProperties().add(new Uid(cursor.getString(1)));
Как в методе запроса, так и в getVEvents я всегда проверяю, является ли курсор пустым, и использую moveToFirst () и moveToNext (), поэтому я не совсем уверен, почему происходит исключение и что именно " Индекс 1, запрошенный с размером 1 ", фактически означает.
Большое спасибо!