studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android sqlite sqliteopenhelper

para - manual de programacion android pdf



Cursor finalizado sin cierre previo() de Android. (4)

Siempre, recuerde cerrar el cursor llamando a cursor.close () antes de cerrar la base de datos. Eso debería arreglar tu problema.

En mi aplicación tengo una vista de lista. Obtengo mis datos con una consulta de una base de datos SQLite. Cuando obtengo los datos de la base de datos obtengo este error:

Ocurre cuando voy de la línea 20 a la 21.

Intenté colocar cursor.deactivate () y cursor.close () en regel 50. Pero sin resultado. ¿Alguien sabe por qué me sale este error y cómo resolverlo? Gracias :)


deje que la actividad administre el ciclo de vida del cursor utilizando startManagingCursor(c) y estará bien.


para encontrar este tipo de problemas simplemente habilite StrictMode para la versión de depuración así:

public void onCreate() { if (DEVELOPER_MODE) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() // or .detectAll() for all detectable problems .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build()); } super.onCreate(); }

más información @ http://developer.android.com/reference/android/os/StrictMode.html

todo lo mejor,


Tienes que cerrar el cursor antes de la base de datos. Coloque su código en un bloque try / catch y en un bloque finally , cierre el cursor y luego cierre la base de datos:

try { db = ... } catch(Exception ex) { // Log the exception''s message or whatever you like } finally { try { if( cursor != null && !cursor.isClosed()) cursor.close(); if( db.isOpen() ) db.close(); } catch(Exception ex) {} }

La secuencia de cierre es muy importante al hacer IO con DB o proveedores de contenido. Para más información consultar este enlace.