Evitar IllegalStateException en SQLiteCursor para Android

Tengo una ListActivity que está vinculada a un cursor, cuando se seleccionan elementos en el ListView una actividad EditItem es iniciada por startActivityForResult , esta actividad EditItem preforma varias consultas, cada una colocada en su propio Cursor independiente. Estos se utilizan para poblar los hiladores, al igual que un campo de búsqueda en un DB de acceso.

Mi problema es que una vez que el usuario deja esta actividad EditItem , ya sea a través de enviar, cancelar o retroceder el botón, vuelve a la actividad ListView y selecciona otra entrada en el ListView (mismo elemento o uno diferente) Tengo errores IllegalStateException en mi clase SQLiteCursor (Android, no el mío). Estoy cerrando mis cursores en el método onDestroy de ambas actividades, ya que a veces pedir un resultado aún destruirá la actividad de llamada.

Esto no siempre ocurre en la segunda selección de un elemento, a veces se producirá en la tercera selección. Pensé que tal vez me estaba moviendo más rápido que el sistema operativo, por lo que empezar a pausar, hasta 30 segundos, entre mis acciones, el error sólo se lanza después de llamar a la actividad para el resultado de una segunda o tercera vez. Ninguna cantidad de pausa corrige esto.

Edit: El error está en el método SQLiteCursor finalize en la llamada a super.finalize();

Editar # 2: Traza de pila para el hilo:

 Daemon System Thread [<5> HeapWorker] (Suspended (exception IllegalStateException)) SQLiteCursor.finalize() line: 603 NativeStart.run() line: not available [native method] 

Editar # 3 Rastreo de la pila de LogCat (partslist es el nombre de la tabla):

 INFO/dalvikvm(599): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@437541a0 on partslist that has not been deactivated or closed INFO/dalvikvm(599): at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596) INFO/dalvikvm(599): at dalvik.system.NativeStart.run(Native Method) 

Asegúrese de que cursor.close() cuando haya terminado con ellos.

La adición de cursor.close() fue la solución al problema.

  • ¿Cómo descargar una base de datos SQLite desde un dispositivo Android?
  • Intent.ACTION_PICK devuelve el cursor vacío para algunos contactos
  • Android y SQLite - recupera el ID máximo de la tabla
  • Compare las fechas (almacenadas como cadena) en la base de datos android sqlite?
  • Orden de clasificación de la consulta SQLiteDatabase de Android
  • Aplicación de Android (Samsung Galaxy Tab, 2.2) no * a veces * escribir en el DB
  • Prácticas recomendadas para unir tablas y notificar a ContentObservers en Android ContentProvider
  • Mejor manera de acceder a la base de datos en la aplicación multi-threaded Android?
  • Android: Sugar ORM No hay tal excepción de tabla
  • Leer 3 elementos seleccionados al mismo tiempo
  • ¿Existe un caché de memoria para SQLite en Android y cómo liberarlo o borrarlo?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.