Hi,

I'm writing an app which has 2 activities and gets his data from a
database. Unfortunately I'm not sure when I have to open and close the
database properly. In both activities I'm opening the database so the
activities can access its data. When I do the following:

 * Start the app
 * Open activity 1
 * Open activity 2 (via button in activity 1)
 * Hit the back button (back to activity 1)
 * Again back button (back to home screen)
 * Start the app

I'm receiving such an leak error:

07-15 14:34:19.504: ERROR/Database(234): Leak found
07-15 14:34:19.504: ERROR/Database(234):
java.lang.IllegalStateException: mPrograms size 1
07-15 14:34:19.504: ERROR/Database(234):     at
android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:
1669)
07-15 14:34:19.504: ERROR/Database(234):     at
dalvik.system.NativeStart.run(Native Method)
07-15 14:34:19.504: ERROR/Database(234): Caused by:
java.lang.IllegalStateException: /data/data/de.anote/databases/
anote.db SQLiteDatabase created and never closed

.... more stuff .....

I guess it is because I'm not closing the database so implemented the
following:

 * db.open() in both onCreate() and both onResume() methods by the 2
activities
 * db.close() in both onPause() methods.

But now I'm receiving another error:

07-15 15:27:18.472: ERROR/AndroidRuntime(266): Uncaught handler:
thread main exiting due to uncaught exception
07-15 15:27:18.508: ERROR/AndroidRuntime(266):
java.lang.RuntimeException: Unable to resume activity {de.anote/
de.anote.gui.CategoryView}: java.lang.IllegalStateException: mQuery
SELECT _id, note_name, value, date, category, priority, reminderbool,
reminder, todo FROM t_note WHERE category=? ORDER BY date 1
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.ActivityThread.performResumeActivity(ActivityThread.java:
2950)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:
2965)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1889)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.os.Handler.dispatchMessage(Handler.java:99)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.os.Looper.loop(Looper.java:123)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.ActivityThread.main(ActivityThread.java:4363)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
java.lang.reflect.Method.invokeNative(Native Method)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
java.lang.reflect.Method.invoke(Method.java:521)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
dalvik.system.NativeStart.main(Native Method)
07-15 15:27:18.508: ERROR/AndroidRuntime(266): Caused by:
java.lang.IllegalStateException: mQuery SELECT _id, note_name, value,
date, category, priority, reminderbool, reminder, todo FROM t_note
WHERE category=? ORDER BY date 1
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:162)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.database.sqlite.SQLiteCursor.requery(SQLiteCursor.java:536)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.Activity.performRestart(Activity.java:3736)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.Activity.performResume(Activity.java:3756)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.app.ActivityThread.performResumeActivity(ActivityThread.java:
2937)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     ... 10 more
07-15 15:27:18.508: ERROR/AndroidRuntime(266): Caused by:
android.database.sqlite.SQLiteMisuseException: library routine called
out of sequence: handle 0x0
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.database.sqlite.SQLiteProgram.native_bind_string(Native
Method)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:
178)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     at
android.database.sqlite.SQLiteQuery.requery(SQLiteQuery.java:153)
07-15 15:27:18.508: ERROR/AndroidRuntime(266):     ... 14 more

Unfortunately I can't read which line in my code causes this exception
but I guess it is because there is some point where is a database
access and the db is still closed.

So my question is, at which places should I open and close my
database? It is right to open it in the onCreate(), onResume() methods
and close it in onPause()?

-- 
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.

NEW! Try asking and tagging your question on Stack Overflow at
http://stackoverflow.com/questions/tagged/android

To unsubscribe from this group, send email to
android-beginners+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en

Reply via email to