Android – Base de datos con ContentValue con error booleano?

Creé una tabla de base de datos en mi aplicación para Android. He utilizado esta consulta:

CREATE TABLE foo (_id INTEGER PRIMARY KEY AUTOINCREMENT, mybool BOOLEAN) 

Que añadí fila a la tabla, que el valor de mybool será true .
Corrí el comando sqlite3 para ver el valor en la tabla, y vi:

  _id | mybool ---------------------- 1 | 1 

Eso es corret, el true valor se convirtió en 1.

Lo extraño está en la lectura. Leí la tabla así:

 ContentValues values = new ContentValues(); Cursor cursor = db.rawQuery("SELECT * FROM foo", null); DatabaseUtils.cursorRowToContentValues(cursor, values); 

Entonces obtengo resultado extraño:

 values.getAsBoolean("mybool"); // return false - WRONG values.getAsInteger("mybool"); // return 1 = true - CORRECT 

Utilizo el código como ese para obtener un valor booleano:

 values.getAsInteger("mybool") != 0; 

Pero es extraño.

¿Por qué siempre me sale false en la función getAsBoolean ? ¿Hay algún error en la clase ContentValues ? ¿Alguien más tiene este problema?

getAsBoolean no devuelve un boolean sino un objeto contenedor Boolean , que puede ser null , Boolean.FALSE o Boolean.TRUE . Si puede asegurarse de que no hay NULL s, use values.getAsBoolean("mybool").booleanValue() para obtener el valor real.

DatabaseUtils.cursorRowToContentValues ​​() almacena todo como cadenas (excepto blobs). ContentValues.getAsBoolean () intentará convertir la cadena a un boolean (usando Boolean.valueOf ()), pero que sólo funciona si la cadena es igual a "true", no "1".

Esto me parece un error de Android.

Has omitido algún código aquí.

¿Cuál es su prueba de que values.getAsBoolean ("mybool") devuelve false? Tienes que devolver un booleano. ¿Cómo lo está comprobando?

ContentValues.getAs devuelve un valor si se puede encontrar la clave, o null si no puede o si no se puede convertir el valor. Asegúrese de que está haciendo una prueba completa.

No sé si es la mejor solución para este problema, pero este código a continuación funciona para mí:

 Integer result = contentValues.getAsInteger(attributeName); if(result == null || result == 0) { parameter = false; } else { parameter = true; } 

Obtener resultados booleanos como a continuación:

boolean result = values.getAsInteger("mybool") == 1;

  • Android SQLite COMO comodín de escape
  • Sync SQLite / tabla de base de datos de Android a la tabla de base de datos MySQL remoto (a través de PHP)
  • Pasar una matriz de datos a una base de datos SQLite en android
  • Sqlite sincrónico
  • Android: filtrar un SimpleCursorAdapter ListView
  • ¿Debo usar un proveedor de contenido?
  • Conexión con Sqlite en android a través de Servlet
  • Base de datos SQLite de Android, ¿POR QUÉ caída de tabla y volver a crear en la actualización
  • ¿Cuál es el modo de subprocesamiento predeterminado de SQLite en Android?
  • Consulta de ORMLite para la fecha
  • Los datos no se insertan en la base de datos Sqlite en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.