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:
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?