blup On 9 Maj, 16:22, kamiseq <[email protected]> wrote: > hi, > Im starting with android and have few questions about database access. > > 1. Every tutorial I ve read (ie Notepad) that uses sqlite creates and > opens connection via SQLiteOpenHelper in onCreate callback. but I > really have never seen that the connection is closed (androids throws > exceptions that there is a leak as connection is never closed). So I > assume that onSaveInstanceState is the best bet to close as onCreate > opens the connection. but maybe it should be sooner - something like > onResume (for open) and onPause (for close). or maybe those tutorials > are too trivial and I should create another layer for accessing data > in services, so that data could be shared between activities and > wouldn't suffer from activity life cycle. > > the only thing is that the exception is thrown after a while - not > immediately after destroying activity > D/MyMainActivity :( 305): on Pause. > D/MyMainActivity :( 305): on Stop. > D/MyMainActivity :( 305): on Destroy. > D/dalvikvm( 101): GC freed 408 objects / 18416 bytes in 78ms > I/ActivityManager( 55): Starting activity: Intent > { act=android.intent.action.MAIN > cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=info.kami > D/MyMainActivity :( 305): on create. > D/MyMainActivity :( 305): on Start. > D/MyMainActivity :( 305): on Resume. > I/ActivityManager( 55): Displayed activity > my.app.android/.MainActivity: 664 ms (total 664 ms) > I/ActivityManager( 55): Starting activity: Intent > { act=android.intent.action.MAIN cat=[android.intent.category.HOME] > flg=0x10200000 cmp=com.android.l > D/MyMainActivity :( 305): on Pause. > D/MyMainActivity :( 305): on Stop. > I/ActivityManager( 55): Starting activity: Intent > { act=android.intent.action.MAIN > cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=info.kami > D/MyMainActivity :( 305): on Restar. > D/MyMainActivity :( 305): on Start. > D/MyMainActivity :( 305): on Resume. > D/dalvikvm( 305): GC freed 5465 objects / 347528 bytes in 95ms > E/Database( 305): Leak found > E/Database( 305): java.lang.IllegalStateException: mPrograms size 1 > E/Database( 305): at > android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java: > 1668) > E/Database( 305): at dalvik.system.NativeStart.run(Native > Method) > E/Database( 305): Caused by: java.lang.IllegalStateException: /data/ > data/my.app.android/databases/data SQLiteDatabase created and never > closed > E/Database( 305): at > android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java: > 1694) > E/Database( 305): at > android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java: > 738) > E/Database( 305): at > android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase. > java: > 760) > E/Database( 305): at > android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase. > java: > 753) > E/Database( 305): at > android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java : > 473) > E/Database( 305): at > android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java: > 193) > E/Database( 305): at > android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelp > er.java: > 98) > E/Database( 305): at > my.app.android.dao.SQLiteTemplate.openToReadWrite(SQLiteTemplate.java: > 60) > E/Database( 305): at > my.app.android.dao.SQLiteCallDao.open(SQLiteCallDao.java:54) > E/Database( 305): at > my.app.android.MainActivity.getDao(MainActivity.java:102) > E/Database( 305): at > my.app.android.MainActivity.onCreate(MainActivity.java:53) > E/Database( 305): at > android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: > 1047) > E/Database( 305): at > android.app.ActivityThread.performLaunchActivity(ActivityThread.java: > 2459) > E/Database( 305): at > android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: > 2512) > E/Database( 305): at android.app.ActivityThread.access > $2200(ActivityThread.java:119) > E/Database( 305): at android.app.ActivityThread > $H.handleMessage(ActivityThread.java:1863) > E/Database( 305): at > android.os.Handler.dispatchMessage(Handler.java:99) > E/Database( 305): at android.os.Looper.loop(Looper.java:123) > E/Database( 305): at > android.app.ActivityThread.main(ActivityThread.java:4363) > E/Database( 305): at > java.lang.reflect.Method.invokeNative(Native Method) > E/Database( 305): at java.lang.reflect.Method.invoke(Method.java: > 521) > E/Database( 305): at com.android.internal.os.ZygoteInit > $MethodAndArgsCaller.run(ZygoteInit.java:860) > E/Database( 305): at > com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) > E/Database( 305): at dalvik.system.NativeStart.main(Native > Method) > E/Database( 305): Leak found > > 2. Is it really that important (from performance point of view) to use > cursor when possible? usually I map each row in cursor to some type > and work on a List of that type. > 3. how to avoid fetching (even that db is local) all data from some > table when my ListView can show only few results at a time. does api > support kind of data scrolling - that I missed reading tutorials?? Or > should I take care of such situation by myself and fetch-replace data > in the view when user drag the scroll bar. > 4. I would love to AndroidManifest.xml act as IoC bean descriptor so > in code you could annotate field to have your data-service injected. > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group > athttp://groups.google.com/group/android-developers?hl=en
-- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

