Не удалось прочитать строку 384, столбец 47 из CursorWindow. Убедитесь, что курсор инициализирован правильно

Я читаю некоторые данные из календаря Android и иногда получаю странные отчеты о сбоях от пользователей, например:

java.lang.IllegalStateException: Couldn't read row 384, col 47 from CursorWindow. 
Make sure the Cursor is initialized correctly before accessing data from it.

Мой код здесь (жирным шрифтом выделена строка, где происходит сбой приложения):

        Cursor eventCursor = contentResolver.query
            (builder.build(), 
            null, 
            CalendarContract.Instances.CALENDAR_ID + " IN (" + ids  + ")", 
            null, 
            null);

        if (eventCursor == null)
            return true;

        while (eventCursor.moveToNext()) {  //this line causecrash
            ... do something...
        }

Почему это происходит? Его нельзя смоделировать. Это никогда не случалось со мной, и я просто не могу понять ни причину, ни сообщение об ошибке.


person qkx    schedule 15.05.2013    source источник


Ответы (1)


В начале итерации используйте eventCursor.moveToFirst() для перейти к первому ряду. Вы можете использовать что-то вроде этого:

if (eventCursor != null) {

    //Start from beginning
    eventCursor.moveToFirst();

    // Loop over rows
    while (eventCursor.moveToNext()) {

        // Do Somehing here
    }
 }

Вы также можете проверить, есть ли у курсора строки, используя eventCursor.getCount().

person Sam R.    schedule 15.05.2013