Cursor.getType () для уровня API <11

Я запрашиваю контент-провайдера CallLog и должен определить типы столбцов.

В Honeycomb и новее (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?

Есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос