La Base de données Sqlite FUITE exception dans android?
Je reçois cette exception dans la base de données de Fuite
mon LOGCAT Montre ceci:
02-17 17:20:37.857: INFO/ActivityManager(58): Starting activity: Intent { cmp=com.example.brown/.Bru_Bears_Womens_View (has extras) }
02-17 17:20:38.477: DEBUG/dalvikvm(434): GC freed 1086 objects / 63888 bytes in 119ms
02-17 17:20:38.556: ERROR/Database(434): Leak found
02-17 17:20:38.556: ERROR/Database(434): java.lang.IllegalStateException: /data/data/com.example.brown/databases/BRUNEWS_DB_01.db SQLiteDatabase created and never closed
02-17 17:20:38.556: ERROR/Database(434): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1694)
02-17 17:20:38.556: ERROR/Database(434): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:738)
02-17 17:20:38.556: ERROR/Database(434): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:760)
02-17 17:20:38.556: ERROR/Database(434): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:753)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:473)
02-17 17:20:38.556: ERROR/Database(434): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
02-17 17:20:38.556: ERROR/Database(434): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
02-17 17:20:38.556: ERROR/Database(434): at com.example.brown.Brown_Splash.onCreate(Brown_Splash.java:52)
02-17 17:20:38.556: ERROR/Database(434): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-17 17:20:38.556: ERROR/Database(434): at android.os.Handler.dispatchMessage(Handler.java:99)
02-17 17:20:38.556: ERROR/Database(434): at android.os.Looper.loop(Looper.java:123)
02-17 17:20:38.556: ERROR/Database(434): at android.app.ActivityThread.main(ActivityThread.java:4363)
02-17 17:20:38.556: ERROR/Database(434): at java.lang.reflect.Method.invokeNative(Native Method)
02-17 17:20:38.556: ERROR/Database(434): at java.lang.reflect.Method.invoke(Method.java:521)
02-17 17:20:38.556: ERROR/Database(434): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-17 17:20:38.556: ERROR/Database(434): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-17 17:20:38.556: ERROR/Database(434): at dalvik.system.NativeStart.main(Native Method)
comment puis-je le résoudre???
merci d'avance...
Vous devez vous connecter pour publier un commentaire.
Vous devez fermer votre base de données
http://www.devx.com/wireless/Article/40842/1763?supportItem=4
cursor
trop?Vous avez besoin de fermer la base de données de l'objet ou de tenir à l'objet de base de données de sorte qu'il y est une variable de votre Fournisseur de Contenu qui fait référence à l'objet de base de données permettant la collecte des ordures à ignorer la base de données ouverte.
Le problème avec la fermeture de la base de données du fournisseur de contenu est que le curseur d'être retourné à l'activité qui a demandé la requête devient un vide curseur.
Donc le choix est soit de se tenir à la base de données ouverte objet de l'histoire (la durée de vie du Fournisseur de Contenu) ou assurez-vous que la base de données est fermée lorsque le curseur est fermé.
J'ai choisi la deuxième option et dérivé d'un curseur par l'extension de la SQLiteCursor classe et la mise en œuvre de la SQLiteDatabase.CursorFactory interface avec le code suivant:
Ce code donne un objet curseur qui ferme la base de données lorsque le curseur lui-même est fermé, la résolution de l'exception IllegalStateException au cours de la collecte des ordures. Ce n'placer la responsabilité de la fermeture du curseur sur l'activité qui l'a demandé. Cela ne devrait pas mettre un fardeau supplémentaire sur l'activité depuis la fermeture du curseur lorsque vous avez terminé, il est de bonne pratique.
Ces deux classes sont imbriquées à l'intérieur des MyProvider, mon fournisseur de contenu de classe et le membre de données CursorID est initialisé par MyProvider.
Assurez-vous de toujours fermer votre DB Helper avant de Quitter l'Activité.