Cursor.getType () para nível de API <11

Estou consultando o provedor de conteúdo do CallLog e preciso detectar os tipos de coluna.

No Honeycomb e mais recente (API Nível 11+), você pode obter um tipo de dados preferencial de colunas chamando o métodoCursor.getType(int columnIndex) que retorna um dos seguintes tipos:

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

Como posso fazer isso em dispositivos pré-favo de mel <11?

Eu tentei o seguinte:

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

}

No entanto, nenhuma exceção é lançada. Os dados são sempre lançados no primeiro tipo que você está verificando, neste caso, getInt (). Isso significa que eu obtenho os valores corretos se o tipo de coluna forInteiro mas um0 para todos os outros tipos.

Por que não estou procurando na documentação para verificar qual tipo está armazenado? As colunas diferem dependendo do fabricante do dispositivo e nem todas estão documentadas, veja esta pergunta:Como lidar com diferenças dependentes do fabricante em ContentProviders?

Alguma ideia?

questionAnswers(4)

yourAnswerToTheQuestion