2011-08-23 97 views
0

我在android的listview中顯示數據庫。我在另一個活動中顯示列表視圖。我在OnCreate中通過只調用了一個名爲「數據」類,它擴展sqliteopenhelper和傳遞表,但只要我啓動應用程序在DDMS堆棧跟蹤是在android中創建數據庫時發生錯誤

08-23 14:29:07.771: ERROR/Database(5175): Leak found 
08-23 14:29:07.771: ERROR/Database(5175): java.lang.IllegalStateException: /data/data/com.cortes/databases/location.db SQLiteDatabase created and never closed 
08-23 14:29:07.771: ERROR/Database(5175):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1792) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:798) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:857) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:850) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:539) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193) 
08-23 14:29:07.771: ERROR/Database(5175):  at com.cortes.Cortes.onCreate(Cortes.java:79) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.os.Looper.loop(Looper.java:123) 
08-23 14:29:07.771: ERROR/Database(5175):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
08-23 14:29:07.771: ERROR/Database(5175):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-23 14:29:07.771: ERROR/Database(5175):  at java.lang.reflect.Method.invoke(Method.java:521) 
08-23 14:29:07.771: ERROR/Database(5175):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
08-23 14:29:07.771: ERROR/Database(5175):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
08-23 14:29:07.771: ERROR/Database(5175):  at dalvik.system.NativeStart.main(Native Method) 
08-23 14:29:07.846: ERROR/wpa_supplicant(2300): wpa_driver_priv_driver_cmd failed 
08-23 14:29:07.846: ERROR/wpa_supplicant(2300): wpa_driver_priv_driver_cmd failed 

和我的代碼是

創建數據庫
db = this.openOrCreateDatabase("location.db", SQLiteDatabase.OPEN_READWRITE, null); 
d = new data(this,Geo_Create_Table); 
db=d.getWritableDatabase(); 
+0

數據是擴展sqliteopenhelper的新類的名稱 – hussain

+0

您是否在活動之間共享數據庫? –

+0

是的我在活動之間分享表geo_create_table – hussain

回答

0

由於我沒有足夠的聲望發表評論>。 <我要把這個作爲一個答案。

堆棧跟蹤包含此SQLiteDatabase創建並從未關閉這導致我相信數據庫從未關閉。我假設Android正在抓住這裏的三條線 db = this.openOrCreateDatabase(「location.db」,SQLiteDatabase.OPEN_READWRITE,null); d =新數據(this,Geo_Create_Table); db = d.getWritableDatabase(); 因爲這就是你所提供的一切,我認爲你也是這樣想的。如果我明白這是要做什麼,你打開一個本地存儲的數據庫db然後,我猜d也引用相同的本地存儲的數據庫。 MAYBE(不太確定)會導致應用程序中的內存泄漏,但我知道的一件事是,您需要在某處添加db.close()

您可以嘗試通過使用try {}使這個其它用戶終於{db.close()} Need help with Database Access in Android

0

您需要關閉留下一個活動之前的數據庫連接的建議。最好的方法是關閉onPause()回調並在onResume()上打開。這將確保數據庫連接始終處於有效狀態。

相關問題/答案herehere

第二個鏈接顯示了通過擴展Application類來跨活動共享數據庫連接的策略。