Obtenga booleanos de la base de datos con Android y SQLite

169

¿Cómo puedo obtener el valor de un campo booleano en una base de datos SQLite en Android?

Usualmente uso getString(), getInt()etc. para obtener los valores de mis campos, pero no parece haber un getBoolean()método.

Kevin Bradshaw
fuente

Respuestas:

351

Es:

boolean value = cursor.getInt(boolean_column_index) > 0;
Alex Orlov
fuente
29
cursor.getInt (boolean_column_index)! = 0 es más estándar C.
Buttink
2
Sin embargo, @Buttink >0es más corto en bytes: P
Gurupad Mamadapur
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Elvis
fuente
Aunque no corresponde exactamente a esta pregunta (Alex es la más cercana), es una excelente respuesta, y la usaré.
Budimir Grom
10

La mayoría de las respuestas aquí pueden dar como resultado NumberFormatExceptions o "el operador no está definido para los tipos nulo, int" si la columna en la que almacenó el int también podía contener nulo. La forma decente de hacer esto sería usar

Boolean.parseBoolean(cursor.getString(booleanColumnIndex));`

aunque ahora está limitado a almacenar las cadenas "verdadero" y "falso" en lugar de 0 o 1.

Sojurn
fuente
55
Esto no funciona. Boolean.parseBoolean toma cadenas "verdaderas" o "falsas". Si ha almacenado su valor booleano como 0 o 1, siempre obtendrá falso.
Gober
Si lo que dice Gober es cierto, entonces esta respuesta merece ser rechazada
Shervin Asgari
Ah, tiene razón. Creo que la claridad del resultado supera la necesidad de almacenar las cadenas.
Sojurn
1
@ShervinAsgari en la otra respuesta, si almacena su booleano como verdadero o falso, siempre será falso. Por lo tanto, también debería ser rechazado con su lógica.
Arda Kara
6

Una implementación que se encuentra en Ormlite Cursor también verifica Null, lo que ninguna de las otras respuestas hace.

   public boolean getBoolean(int columnIndex) {
        if (cursor.isNull(columnIndex) || cursor.getShort(columnIndex) == 0) {
            return false;
        } else {
            return true;
        }
    }
rtack
fuente
6

También puedes usar

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
fuente
55
igual () no contiene
Shervin Asgari
3

Otra opción

boolean value = (cursor.getString(column_index)).equals("1");
Gokhan Arik
fuente
3

booleantipo de datos no está disponible en Cursor.

obtendrá el resultado en un int, por lo que debe convertir ese intvalor en a boolean.

Puedes usar

boolean b = cursor.getInt(boolean_column_index) > 0;

o

boolean b = (cursor.getInt(boolean_column_index) != 0);
Ravi
fuente
2

boolean b = (cursor.getInt (cursor.getColumnIndex ("item"))! = 0);

RedBullet
fuente
0

Bueno, eso es muy simple:

public boolean getBooleanState(SQLiteDatabase db){
    boolean result = false;
    try{
        String QUERY = "SELECT " + BOOLEAN_DATA + " FROM " + TABLE_NAME + " WHERE " + ID + " = 1";
        Cursor cursor = db.rawQuery(QUERY, null);
        if (cursor.moveToFirst()){
            if(cursor.getString(0).equalsIgnoreCase("1")){
                result = true;
            }
        }
        c.close();
    }catch(Exception ee){
        Log.e(TAG, "err getBooleanState: " + TABLE_NAME );
    }
    return result;
}
silexcorp
fuente