在android中创建数据库时出错

在android中创建数据库时出错,android,sqlite,Android,Sqlite,我在android的listview中显示数据库。我正在另一个活动中显示listview。我正在oncreate中创建数据库,只需调用一个名为data的类,该类扩展了sqliteopenhelper并传递该表,但一旦启动该应用程序,DDMS中的堆栈跟踪就会消失 08-23 14:29:07.771: ERROR/Database(5175): Leak found 08-23 14:29:07.771: ERROR/Database(5175): java.lang.IllegalStateEx

我在android的listview中显示数据库。我正在另一个活动中显示listview。我正在oncreate中创建数据库,只需调用一个名为data的类,该类扩展了sqliteopenhelper并传递该表,但一旦启动该应用程序,DDMS中的堆栈跟踪就会消失

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

因为我还没有足够的声誉发表评论><我将把这作为一个答案

堆栈跟踪包含这个SQLiteDatabase,它创建并从未关闭过,这让我相信数据库从未关闭过。我假设Android正在抱怨这三行代码 db=this.openOrCreateDatabaselocation.db,SQLiteDatabase.OPEN\u READWRITE,null; d=新数据此Geo_创建_表; db=d.getWritableDatabase; 既然你提供了这么多,我想你也这么认为。如果我理解这是要做什么,那么您正在打开一个本地存储的数据库db,然后,我猜d也在引用同一个本地存储的数据库。也许不太确定这是导致应用程序内存泄漏的原因,但我知道的一件事是,你需要在某个地方添加db.close

您可以使用try{}finally{db.close}尝试其他用户提出的建议

在离开活动之前,您需要关闭数据库连接。最好的方法是在onPause回调时关闭,在onResume时打开。这将确保数据库连接始终处于有效状态

相关问题/答案和答案


第二个链接显示了通过扩展应用程序类跨活动共享数据库连接的策略。

data是扩展SQLiteOpenHelper的新类的名称。是否在活动之间共享数据库?是的,我在活动之间共享表geo\u create\u表
db = this.openOrCreateDatabase("location.db", SQLiteDatabase.OPEN_READWRITE, null);
d = new data(this,Geo_Create_Table);
db=d.getWritableDatabase();