android sqlite数据库已经关闭错误

时间:2012-04-09 15:42:19

标签: android sqlite android-appwidget

我有一个带有sqlite数据库的应用程序。

我创建了自己的数据库类,其中包含一个SqliteDatabase实例。该类实现我的查询,打开,关闭等(该类不是单例)。

我的应用中有活动,服务和appwidget。

在我需要数据库的地方,我创建了一个我的类的对象,打开,做东西并在最后关闭。

例如在活动中我在onStart中打开数据库并在onStop上关闭它。

除了在appwidget中,一切都很好。

如果我需要在appUidget onUpdate中选择数据,那就没关系。

但是当我尝试从appwidget执行UPDATE时,我得到“数据库DATABASE_FLE已经关闭”错误。

它有什么用?

我添加了一些日志,我正在关闭数据库,并且在这个错误之前没有这些行执行..数据库应该没问题。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

我正在考虑的是,android可以关闭/卸载您的活动(例如,如果设备上剩下一点内存,可能会发生这种情况),但此时您的appwidget仍处于活动状态。

现在,由于您的活动已关闭,因此您的数据库已关闭。 Appwidget试图更新数据库,但它已经关闭。

检查此方案,但无论如何您应该考虑这种情况。 :)

答案 1 :(得分:0)

问题是我编译了一个SQLiteStatment对象并将其保存以备将来使用,而我的数据库对象被替换了。 所以SQLiteStatement需要重新编译。

我有这样的事情:

public void func(SQLiteDatabase db) {
   if (mStatement == null)
      mStatement = db.compileStatement(SQL);

   mStatement.execute();

这个问题是在函数调用中更改了db对象,并且已经关闭了编译语句的第一个db对象。

解决方案是删除if-null,并为每个db对象编译语句。