Ottieni valori booleani dal database utilizzando Android e SQLite


169

Come posso ottenere il valore di un campo booleano in un database SQLite su Android?

Di solito uso getString(), getInt()ecc. Per ottenere i valori dei miei campi, ma non sembra esserci un getBoolean()metodo.

Risposte:


351

È:

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

29
cursor.getInt (boolean_column_index)! = 0 è più standard C.
Buttink

2
@Buttink >0è più breve in byte però: P
Gurupad Mamadapur


23
boolean value = (cursor.getInt(boolean_column_index) == 1);

Anche se non corrisponde esattamente a questa domanda (quella di Alex è la più vicina), è un'ottima risposta e la userò.
Budimir Grom,

10

La maggior parte delle risposte qui può provocare NumberFormatExceptions o "l'operatore non è definito per i tipi null, int" se la colonna in cui è stato memorizzato l'int è stata autorizzata a contenere anche null. Il modo decente per farlo sarebbe usare

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

anche se ora sei limitato a memorizzare le stringhe "true" e "false" anziché 0 o 1.


5
Questo non funziona. Boolean.parseBoolean accetta stringhe "true" o "false". Se hai memorizzato il tuo valore booleano come 0 o 1, otterrai sempre falso.
Gober,

Se ciò che dice Gober è vero, allora questa risposta merita di essere annullata
Shervin Asgari,

Ah, ha ragione. Penso che la chiarezza del risultato superi il dovere di memorizzare le stringhe.
Sojurn,

1
@ShervinAsgari nell'altra risposta se memorizzi il tuo booleano come vero o falso, diventerà sempre falso. Quindi dovrebbe essere ridimensionato anche con la tua logica.
Arda Kara,

6

Un'implementazione trovata su Ormlite Cursor verifica anche la presenza di null, che nessuna delle altre risposte fa.

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

6

Puoi anche usare

boolean value =cursor.getString(boolean_column_index).equals("True");

5
equals () non contiene
Shervin Asgari,

3

Un'altra opzione

boolean value = (cursor.getString(column_index)).equals("1");

3

booleanil tipo di dati non è disponibile in Cursor.

otterrai il risultato in un int, quindi devi convertire quel intvalore in un boolean.

Puoi usare entrambi

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

o

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

2

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


0

Bene, è molto semplice:

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.