¿Por qué mi Cursor no está cerrado en una actividad de Android?

En mi actividad de Android necesito leer cosas de una base de datos. He creado una clase auxiliar que se ocupa de mi acceso a la base de datos. Esta clase de ayuda tiene varios métodos diferentes diseñados para leer cosas diferentes y devolverlas sin mucho alboroto. He aquí un ejemplo.

public String GetName(int id) { String toReturn = null; Cursor cursor = null; try { cursor = db.query(TABLE_NAME, new String[] {"name"}, "id = " + id, null, null, null, null, null); assert(cursor.getCount() == 1); cursor.moveToFirst(); toReturn = new String(cursor.getString(0)); } finally { if(cursor != null) cursor.close(); } return toReturn; } 

Sigo recibiendo el error

10-10 15: 52: 18.991: W / SQLiteCompiledSql (28313): Liberar la declaración en un finalizador. Asegúrese de llamar explícitamente a close () en su cursor: SELECT nombre FROM my_table WHERE id = 0 10-10 15: 52: 18.991: W / SQLiteCompiledSql (28313): android.database.sqlite.DatabaseObjectNotClosedException: La aplicación no cerró el Cursor o objeto de base de datos que se abrió aquí

Con un rastro de pila que conduce directamente a esta función (y unos muy similares a ella), aunque la actividad funciona bien. ¿Qué estoy haciendo mal? Miré a mi alrededor por un tiempo, y ahí es cuando añadí el try / finalmente para asegurarse de que siempre cerrar el cursor, pero todavía estoy recibiendo el error. ¿Cómo puedo arreglar esto?

One Solution collect form web for “¿Por qué mi Cursor no está cerrado en una actividad de Android?”

Usted está cerrando el cursor correctamente pero también necesita cerrar la base de datos, asegúrese de que está cerrando la base de datos también:

 if(db.isOpen()) db.close(); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.