Android “什么是”呢;SQLiteDatabase已创建且从未关闭”;错误?

Android “什么是”呢;SQLiteDatabase已创建且从未关闭”;错误?,android,sqlite,database-management,Android,Sqlite,Database Management,我已经在我的适配器类中关闭了数据库,那么这个错误在logcat上显示是什么,但是我的应用程序不允许关闭,但是只有错误在log cat上显示..我必须关闭数据库以忽略这个错误 我的错误在…下面..我离开哪个类关闭数据库..我从这个链接获得了帮助 错误/数据库(265):发现泄漏 错误/数据库(265):java.lang.IllegalStateException:/data/data/expenceanywhere.mobile/databases/data-SQLiteDatabase已创建且

我已经在我的适配器类中关闭了数据库,那么这个错误在logcat上显示是什么,但是我的应用程序不允许关闭,但是只有错误在log cat上显示..我必须关闭数据库以忽略这个错误

我的错误在…下面..我离开哪个类关闭数据库..我从这个链接获得了帮助

错误/数据库(265):发现泄漏
错误/数据库(265):java.lang.IllegalStateException:/data/data/expenceanywhere.mobile/databases/data-SQLiteDatabase已创建且从未关闭
错误/数据库(265):位于android.Database.sqlite.SQLiteDatabase。(SQLiteDatabase.java:1581)
错误/数据库(265):位于android.Database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
错误/数据库(265):位于android.Database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:659)
错误/数据库(265):位于android.Database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:652)
错误/数据库(265):位于android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:482)
错误/数据库(265):位于android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
错误/数据库(265):位于android.Database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)
错误/数据库(265):位于expenceanywhere.mobile.NotesDbAdapter.open(NotesDbAdapter.java:56)
错误/数据库(265):位于expenceanywhere.mobile.AddedItemExpense.onCreate(AddedItemExpense.java:199)
错误/数据库(265):位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
错误/数据库(265):位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
错误/数据库(265):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
错误/数据库(265):位于android.app.ActivityThread.access$2100(ActivityThread.java:116)
错误/数据库(265):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
错误/数据库(265):位于android.os.Handler.dispatchMessage(Handler.java:99)
错误/数据库(265):位于android.os.Looper.loop(Looper.java:123)
错误/数据库(265):位于android.app.ActivityThread.main(ActivityThread.java:4203)
错误/数据库(265):位于java.lang.reflect.Method.Invokenactive(本机方法)
错误/数据库(265):位于java.lang.reflect.Method.invoke(Method.java:521)
错误/数据库(265):位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
错误/数据库(265):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
错误/数据库(265):位于dalvik.system.NativeStart.main(本机方法)

记住始终关闭Helper类中的db

//---closes the database---    
public void close() 
{
    DBHelper.close();
}

类似的问题:

您必须在退出应用程序或类之前关闭数据库

db.close()

您需要通过调用
close()
方法来关闭任何打开的数据库对象。

我的一个应用程序也遇到了同样的问题。每次访问数据库时,我都会打开和关闭它。但我还是犯了错误。我假设在这种方法中,访问共享对象的不同线程会弄乱数据库状态

为了克服这个问题,我将数据库实例放在主活动中,并将其共享给所有其他活动。在主活动的
OnCreate()
方法中创建db实例。我必须重写
onResume()
onPause()
方法,我关闭了数据库(在
onPause()
中)并打开了主活动的
onResume()
中)


我不确定这是否是解决问题的正确方法,但到目前为止,它对我很有效。

我确认了Voggella代码泄漏的问题。在我的案例中,有效的方法是像其他人所建议的那样,用一个关闭语句覆盖OnDestroy方法。我想您可以在addediexpense.java中添加此代码

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