2012-12-19 48 views
4

大家好iam新的Android和使用綠色DAO管理數據庫,但IAM經常得到一個數據庫未關閉的異常,因爲IAM在應用程序onTeriminate(),IAM維護只有單一連接的數據庫通過了應用程序,但在某些情況下我的應用程序切換到後臺並恢復數據庫連接對象變得無效,我通過使用之前檢查對象的零內斯處理的問題,但現在經常IAM得到異常如何使用綠色DAO知道數據庫的所有打開連接?

android.database.sqlite.DatabaseObjectNotClosedException:應用沒有關閉這裏打開的遊標或數據庫對象

請幫助我如何提前處理這個

感謝

堆棧跟蹤: 九月1日至3日:39:18.688:E/SQLiteDatabase(3063):關閉()從未被明確要求數據庫'/data/data/com.opera.mini.android/databases/google_analytics.db' 01-03 09:39:18.688:E/SQLiteDatabase(3063):android.database.sqlite.DatabaseObjectNotClosedException:應用程序未關閉在這裏打開的遊標或數據庫對象 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android.database.sqlite.SQLiteDatabase。(SQLiteDatabase.java:1943) 01-03 09:3 9:18.688:E/SQLiteDatabase(3063):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007) 01-03 09:39:18.688:E/SQLiteDatabase(3063):在android.database。 sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986) 01-03 09:39:18.688:E/SQLiteDatabase(3063):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051) 01-03 E/SQLiteDatabase(3063):at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:787) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android.content。 ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221) 01-03 09:39: 18.688:E/SQLiteDatabase(3063):在android.database.sql ite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157) 9月一日至3日:39:18.688:E/SQLiteDatabase(3063):在com.google.android.apps.analytics.PersistentHitStore.loadExistingSession(未知來源) 01- 03 09:39:18.688:E/SQLiteDatabase(3063):at com.google.android.apps.analytics.PersistentHitStore。(Unknown Source) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at com .google.android.apps.analytics.PersistentHitStore。(Unknown Source) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at com.google.android.apps.analytics.AnalyticsReceiver.onReceive(Unknown Source) E/SQLiteDatabase(3063):com.opera.mini.android.OpMiniInstallReferrerReceiver.onReceive(Source:15) 01-03 09:39:18.688:01/:在android.app.ActivityThread.handleReceiver(ActivityThread.java:2119) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android.app.ActivityThread.access $ 1500(ActivityThread.java:123) 01-03 09:39:18.688:E/SQLiteDatabase(3063)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1197) 01-03 09:39:18.688:E/SQLiteDatabase(3063):在android.os.Handler.dispatchMessage(Handler.java:99) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android.os.Looper.loop(Looper.java:137) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at android .app.ActivityThread.main(ActivityThread.java:4424) 9月1日至3日:39:18.688:E/SQLiteDatabase(3063):在java.lang.reflect.Method.invokeNative(本機方法) 9月1日至3日: 39:18.688:E/SQLiteDatabase(3063):在java.lang。方法.invoke(Method.java:511) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:784) 01-03 09:39:18.688:E/SQLiteDatabase(3063):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 01-03 09:39:18.688:E/SQLiteDatabase 3063):at dalvik.system.NativeStart.main(Native Method) 01-03 09:39:18.688:E/System(3063):終結器引發的未捕獲異常 01-03 09:39:18.688:E/System (3063):java.lang.IllegalStateException:沒有數據庫鎖! (3063):at android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2090) 01-03 09:39:18.688:E/System(3063) :at android.database.sqlite.SQLiteDatabase $ 1.entryRemoved(SQLiteDatabase.java:2182) 01-03 09:39:18.688:E/System(3063):at android.database.sqlite.SQLiteDatabase $ 1.entryRemoved(SQLiteDatabase。 java:2178) 01-03 09:39:18.688:E/System(3063):at android.util.LruCache.trimToSize(LruCache.java:197) 01-03 09:39:18.688:E/System 3063):at android.util.LruCache.evictAll(LruCache.java:285) 01-03 09:39:18.688:E/System(3063):at android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java: 2143) 01-03 09:39:18.688:E/System(3063):at android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDa tabase.java:1126) 01-03 09:39:18.688:E/System(3063):at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:1914) 01-03 09:39:18.688: E/System(3063):at java.lang.Daemons $ FinalizerDaemon.doFinalize(Daemons.java:182) 01-03 09:39:18.688:E/System(3063):at java.lang.Daemons $ FinalizerDaemon。運行(Daemons.java:168) 九月1日至3日:39:18.688:E /系統(3063):在java.lang.Thread.run(Thread.java:856)

代碼關閉連接:

@Override 
public void onTerminate() { 
    // TODO Auto-generated method stub 
    super.onTerminate(); 
    snail_mail_db.close(); 
     snail_mail_database_helper_obj.close(); 

} 
+0

請提供完整的堆棧跟蹤和相關代碼。 –

+0

我已更新我的問題 –

+0

檢查您的堆棧跟蹤。我覺得這與您的應用或greenDAO無關。 –

回答

0

你正在得到這個異常「應用程序說明沒有關閉在此處打開的遊標或數據庫對象「,因爲當您打開連接時,您需要在操作完成時關閉該遊標。使用db.close();任何操作完成後。

+0

Iam維護單個連接並關閉應用程序中的一個onTeriminate()方法 –

0

我擴展了應用程序類(作爲應用程序)並打開並關閉了數據庫連接。然後,我的所有活動都可以通過theApp.getInstance().daoSession()訪問數據庫,而不會在活動暫停或結束時關閉數據庫。當最後一項活動完成時,Android將終止應用程序,該應用程序將關閉數據庫連接。

+0

應用程序onTeriminate()未正確調用 –

相關問題