0

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

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

我的应用程序中有一个活动、一项服务和一个应用程序小部件。

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

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

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

如果我需要在appwidget onUpdate中选择数据,那就没问题了。

但是当我尝试从 appwidget 进行更新时,我收到“数据库 DATABASE_FLE 已关闭”错误。

会是什么?

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

有任何想法吗?

谢谢。

4

2 回答 2

0

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

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

检查这种情况,但无论如何你应该考虑这种情况。:)

于 2012-04-09T15:57:28.253 回答
0

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

我有这样的事情:

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

   mStatement.execute();

这样做的问题是 db 对象在函数调用中发生了变化,并且编译语句的第一个 db 对象已经关闭。

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

于 2012-04-09T18:18:52.037 回答