Я запрашиваю у поставщика контента CallLog и вам нужно определить типы столбцов.
В Honeycomb и new (API Level 11+) вы можете получить предпочтительный тип столбцов, вызвав метод Cursor.getType(int columnIndex)
, который возвращает один из следующих типов:
- FIELD_TYPE_NULL (0)
- FIELD_TYPE_INTEGER (1)
- FIELD_TYPE_FLOAT (2)
- FIELD_TYPE_STRING (3)
- FIELD_TYPE_BLOB (4)
Как я могу выполнить это на устройствах с предварительной сотой и 11?
Я пробовал следующее:
for ( int i = 0; i < cursor.getColumnCount(); i++ ) {
int columnType = -1;
try {
cursor.getInt( i );
columnType = Cursor.FIELD_TYPE_INTEGER;
} catch ( Exception ignore ) {
try {
cursor.getString( i );
columnType = Cursor.FIELD_TYPE_STRING;
} catch ( Exception ignore1 ) {
try {
cursor.getFloat( i );
columnType = Cursor.FIELD_TYPE_FLOAT;
} catch ( Exception ignore2 ) {
try {
cursor.getBlob( i );
columnType = Cursor.FIELD_TYPE_BLOB;
} catch ( Exception ignore3 ) {
columnType = Cursor.FIELD_TYPE_NULL;
}
}
}
}
}
Однако исключение не выбрасывается. Данные всегда выдаются в первом типе, который вы проверяете, в этом случае getInt(). Это означает, что я получаю правильные значения, если тип столбца Integer, но 0 для всех других типов.
Почему я не ищу в документации, чтобы проверить, какой тип хранится? Колонки различаются в зависимости от производителя устройства, и не все из них документированы, см. Этот вопрос: Как обрабатывать различия, зависящие от производителя в ContentProviders?
Любые идеи?