2011-10-03 36 views
3

我已經關閉了我的適配器類中的數據庫,所以whay是在logcat上顯示的這個錯誤,但是我的應用程序不是forcr關閉的,但是隻有錯誤顯示在日誌cat..where中,我必須關閉數據庫以忽略此錯誤。 ..?什麼是「SQLiteDatabase創建並從未關閉」的錯誤?

我的錯誤... below..in哪個類我離開關閉數據庫.....我把幫助從這個鏈接http://www.vogella.de/articles/AndroidSQLite/article.html

ERROR/Database(265): Leak found 
     ERROR/Database(265): java.lang.IllegalStateException: /data/data/expenceanywhere.mobile/databases/data SQLiteDatabase created and never closed 
     ERROR/Database(265):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1581) 
     ERROR/Database(265):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638) 
     ERROR/Database(265):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:659) 
     ERROR/Database(265):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:652) 
     ERROR/Database(265):  at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:482) 
     ERROR/Database(265):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193) 
     ERROR/Database(265):  at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) 
     ERROR/Database(265):  at expenceanywhere.mobile.NotesDbAdapter.open(NotesDbAdapter.java:56) 
     ERROR/Database(265):  at expenceanywhere.mobile.AddEditExpense.onCreate(AddEditExpense.java:199) 
     ERROR/Database(265):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
     ERROR/Database(265):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
     ERROR/Database(265):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
     ERROR/Database(265):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
     ERROR/Database(265):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
     ERROR/Database(265):  at android.os.Handler.dispatchMessage(Handler.java:99) 
     ERROR/Database(265):  at android.os.Looper.loop(Looper.java:123) 
     ERROR/Database(265):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
     ERROR/Database(265):  at java.lang.reflect.Method.invokeNative(Native Method) 
     ERROR/Database(265):  at java.lang.reflect.Method.invoke(Method.java:521) 
     ERROR/Database(265):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
     ERROR/Database(265):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
      ERROR/Database(265):  at dalvik.system.NativeStart.main(Native Method) 

回答

1

你必須退出應用程序或退出課前關閉數據庫。

db.close() 
1

您需要通過調用close()方法來關閉任何打開的數據庫對象。

0

我在我的一個應用程序中遇到了同樣的問題。每次訪問數據庫時都會打開並關閉數據庫。但我仍然有錯誤。我認爲訪問共享對象的不同線程會在這種方法中混淆數據庫狀態。

爲了解決這個問題,我將數據庫實例放置在主Activity中,並將其分享給所有其他活動。在主活動的OnCreate()方法中創建數據庫實例。我必須覆蓋onResume()onPause()方法,我關閉了數據庫(在onPause()之內)並打開(在onResume()之內)主要活動。

我不確定這是否是擺脫問題的正確方法,但它迄今爲止還是有效的。

1

我確認Voggella代碼泄漏的問題。在我的案例中有效的是用其他人提出的關閉語句重寫OnDestroy方法。我想你可以在你的AddEditExpense.java中添加這段代碼。

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    dbHelper.close(); 
}