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

Я запрашиваю поставщика содержимого CallLog, и мне нужно определить типы столбцов.

В Honeycomb и новее (API уровня 11+ )вы можете получить предпочтительный тип данных столбцов, вызвав метод Cursor.getType(int columnIndex), который возвращает один из следующих типов:

  • ПОЛЕ _ТИП _НУЛЬ (0)
  • ПОЛЕ _ТИП _ЦЕЛОЕ (1)
  • ПОЛЕ _ТИП _ПОПЛАВКА (2)
  • ПОЛЕ _ТИП _СТРОКА (3)
  • ПОЛЕ _ТИП _BLOB (4)

Как это сделать на устройствах до -Honeycomb <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?

Любые идеи?

24
задан Community 23 May 2017 в 10:30
поделиться