我会在这个问题前面加注this similar question,但我仍然遇到问题。基本上,我想在我的Android应用程序中的两个活动中访问同一个数据库。但是,当我在第二个活动中打开它时,我在LogCat中收到了两个系列的消息:
第一:
“终结者抛出未捕获的异常(将被丢弃):
Ljava / lang / IllegalStateException;:在未停用或关闭的狗上完成游标android.database.sqlite.SQLiteCursor@436053b8 在android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)“
(dogs是我数据库中表格的名称dog_data)
第二:
“错误/数据库(1316):泄漏发现了 错误/数据库(1316):java.lang.IllegalStateException:/data/data/com..../databases/dog_data SQLiteDatabase已创建且从未关闭“
据我所知,我是在退出第一个活动时关闭我的数据库。按照记事本教程的风格,我的SQLiteDatabase周围有一个包装类“DbAdapter”,在第一个活动的onPause()方法中,我在该适配器上调用close方法(它调用我的SQLiteDatabase上的close方法,我的SQLiteOpenHelper)。
我认为问题是我在第二次活动中尝试重新打开数据库:
SQLiteDatabase db = openOrCreateDatabase("dog_data",
SQLiteDatabase.CREATE_IF_NECESSARY, null);
(我选择不使用包装器,因为我只需要在数据库上运行一个查询,这可能是一个问题)。
有人可以告知我的问题可能在哪里吗?我承认(从我的问题可能很清楚)我不完全理解“关闭”数据库的含义(SQLiteDatabase.close()的文档并不特别具体),这可能是我的主要原因。我的问题。
感谢。
答案 0 :(得分:1)
万一有人碰巧遇到类似问题(似乎可能但可能不太可能),我最近偶然发现了解决方案。在我的“DbAdapter”的插入方法中,我(愚蠢地)通过查询具有给定值的行来检查其中一个字段的唯一性,并查看该查询是否返回任何行。这是创建一个我没有关闭的游标,导致上面提到的“Finalizing游标”错误。
答案 1 :(得分:0)
之前我收到过该错误,必须使用cursor.close()来解决问题。我不确定为什么,因为有时我没有使用close()并且没有收到任何错误。也许这是一个警告,只有当它坐在停止错误旁边才会被注意到?
我会说正确的程序是开放的数据库连接 - >通过运行db方法创建游标 - >迭代光标 - >关闭光标 - >关闭数据库连接。