Cursor.getType () dla poziomu API <11

Odpytuję dostawcę treści CallLog i muszę wykryć typy kolumn.

W Honeycomb i nowszym (API Level 11+) można uzyskać preferowany typ kolumn przez wywołanie metodyCursor.getType(int columnIndex) która zwraca jeden z następujących typów:

FIELD_TYPE_NULL (0)FIELD_TYPE_INTEGER (1)FIELD_TYPE_FLOAT (2)FIELD_TYPE_STRING (3)FIELD_TYPE_BLOB (4)

W jaki sposób mogę to osiągnąć na urządzeniach przed 11 urządzeniami typu Honeycomb?

Próbowałem:

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;
                }
           }
       }
   }

}

Nie jest jednak zgłaszany żaden wyjątek. Dane są zawsze rzutowane na pierwszy sprawdzany typ, w tym przypadku getInt (). Oznacza to, że otrzymuję poprawne wartości, jeśli typem kolumny jestLiczba całkowita ale0 dla wszystkich innych typów.

Dlaczego nie szukam w dokumentacji, aby sprawdzić, jaki typ jest przechowywany? Kolumny różnią się w zależności od producenta urządzenia i nie wszystkie z nich są udokumentowane, zobacz to pytanie:Jak radzić sobie z różnicami zależnymi od producenta w ContentProviders?

Jakieś pomysły?

questionAnswers(4)

yourAnswerToTheQuestion