IllegalStateException: не удалось получить слот поля из строки 0 col -1

int columnIndexFromAddrCountry;

public FavoritesActAdapter(Context context, int layout, 
        Cursor c, String[] from, int[] to) {
    super(context, layout, c, from, to);
    gnCursor = c;

    columnIndexFromAddrCountry = 
        c.getColumnIndex(DBAdapter.KEY_FROM_ADDR_COUNTRY);

}

@Override
public void bindView(View view, Context context, Cursor cursor) {
    gnCursor = getCursor();

    final String fromAddrCountry = 
        gnCursor.getString(columnIndexFromAddrCountry);

        ...

        super.bindView(view, context, cursor);
}

Почему я получаю IllegalStateException?

IllegalStateException: не удалось получить слот поля из строки 0 col -1

Что означает это исключение? Исключение выбрано для этой строки

final String fromAddrCountry = gnCursor.getString(columnIndexFromAddrCountry);

потому что columnIndexFromAddrCountry это -1. Столбец существует, и десять других столбцов могут быть разрешены. Что может вызвать эту проблему?

Заранее спасибо!


person M.E.    schedule 26.01.2011    source источник


Ответы (1)


Что установлено DBAdapter.KEY_FROM_ADDR_COUNTRY?

Из документа по курсору.

public abstract int getColumnIndex (String columnName)

Начиная с: Уровень API 1 Возвращает отсчитываемый от нуля индекс для заданного имени столбца или -1, если столбец не существует. Если вы ожидаете, что столбец существует, вместо этого используйте getColumnIndexOrThrow(String), что сделает ошибку более ясной.

Таким образом, вы можете использовать getColumnIndexOrThrow(String), чтобы получить лучшее сообщение об ошибке, которое поможет вам в отладке.

person ccheneson    schedule 26.01.2011
comment
DBAdapter.KEY_FROM_ADDR_COUNTRY — общедоступная статическая строка, представляющая имя столбца. Та же строка используется для создания таблицы. - person M.E.; 27.01.2011
comment
Хорошо, тогда вы можете убедиться, что курсор находится в запросе к таблице, которой принадлежит KEY_FROM_ADDR_COUNTRY. - person ccheneson; 27.01.2011
comment
Ага! Ваш намек был не совсем правильным, но почти. ;) Курсор сдан правильно и был на правильном столе. Но: я получаю курсор, вызывая запрос в моей базе данных. В этом запросе у меня был дважды один и тот же столбец (который очень похож на KEY_FROM_ADDR_COUNTRY). Глупая ошибка... ^^ Спасибо! - person M.E.; 27.01.2011