Причина ошибки
Причиной сбоя является попытка получить столбец со смещением -1, который никогда не будет существовать, поскольку смещения могут быть от 0 до количества столбцов вкурсор меньше 1.
Причина использования -1 в том, что это значение, возвращаемое методом Cursor getColumnIndex , когда имя столбца, переданное методу, не существует вкурсор.
Причина, по которой вы получаете -1, заключается в том, что вы не включили столбец, имя которого соответствует DataContract.DataEntry._ID, разрешенному в курсоре, поэтому строка: -
int currentId = c.getColumnIndex(DataContract.DataEntry._ID);
приводит к currentId , равному -1
Таким образом, вышеуказанная ошибка при выполнении следующей строки: -
int id = c.getInt(currentId);
Исправление
Одним из исправлений будет указание null вместо projection , это приведет к извлечению всех столбцов таблицы и будет эквивалентно использованию SELECT * FROM .......
например, используя: -
Cursor c = db.query(DataContract.DataEntry.TABLE_NAME,
null,
null,
null,
null,
null,
null);
Другим исправлением было бы изменить: -
String[] projection = {DataContract.DataEntry.COLUMN_PROJECT_NAME,
DataContract.DataEntry.COLUMN_HEAD,
DataContract.DataEntry.COLUMN_CITY,
DataContract.DataEntry.COLUMN_COST};
на вместо: -
String[] projection = {DataContract.DataEntry._ID,
DataContract.DataEntry.COLUMN_PROJECT_NAME,
DataContract.DataEntry.COLUMN_HEAD,
DataContract.DataEntry.COLUMN_CITY,
DataContract.DataEntry.COLUMN_COST};
Таким образом, столбец будет включен в Курсор, а смещение будет смещениемэтот столбец (0 в случае выше, поскольку это первый столбец в результате).