Then you could open the db in onCreate(), while in onResume() you open it
only if it's not already opened (by using SQLiteDatabase.isOpen()).

Just some ideas...;)

Hope it works!
Yuvi

On Thu, Jul 15, 2010 at 4:49 PM, Bender <abende...@googlemail.com> wrote:

> Thanks for your reply. I tried to open the db only in onResume() but
> that doesn't work since there are db accesses in the onCreate() method
> which is called before onResume() as far as I know. I think opening
> and closing the db after every access would slow the app down a lot
> because i'm using the db in almost every method. I hope there is
> another solution for it..
>
> On 15 Jul., 16:07, YuviDroid <yuvidr...@gmail.com> wrote:
> > Probably by opening the db both in onCreate() and onResume() in some
> > circustances (e.g. first execution of your app) the db will be opened
> twice,
> > which for sure is not good.
> > If you open the db only in onResume() it should be fine (although I
> didn't
> > try it by myself). Usually, when I need data from the db, I call
> db.open(),
> > fetch my data, and db.close(). In this way I'm pretty sure there won't be
> > any such leak. Still I don't know if that's "the best way" to do it.
> >
> > YuviDroid
> >
> >
> >
> > On Thu, Jul 15, 2010 at 3:51 PM, Bender <abende...@googlemail.com>
> wrote:
> > > 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<android-beginners%2bunsubscr...@googlegroups.com>
> <android-beginners%2bunsubscr...@googlegroups.com<android-beginners%252bunsubscr...@googlegroups.com>
> >
> > > For more options, visit this group at
> > >http://groups.google.com/group/android-beginners?hl=en
> >
> > --
> > YuviDroidhttp://android.yuvalsharon.net
>
> --
> 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<android-beginners%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-beginners?hl=en
>



-- 
YuviDroid
http://android.yuvalsharon.net

-- 
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