在Android的连续活动中使用相同的数据库,而不会发生内存泄漏

问题描述

| 我将以注视着我已经看过这个类似问题的笔记作为开头,但是我仍然遇到问题。基本上,我想在我的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()方法中,我在该Adapter上调用close方法(该适配器在我的适配器上调用close方法)。 SQLiteDatabase和我的SQLiteOpenHelper)。 我认为问题在于我在第二个活动中如何尝试重新打开数据库:
SQLiteDatabase db = openOrCreateDatabase(\"dog_data\",SQLiteDatabase.CREATE_IF_NECESSARY,null);
(我选择不使用包装器,因为我只需要在数据库上运行一个查询,也许这是一个问题)。 有人可以建议我的问题在哪里吗?我承认(可能从我的问题中可以清楚地看出),我不完全理解“关闭”数据库的含义(SQLiteDatabase.close()的文档不是特别具体)。我的问题的主要原因。 谢谢。     

解决方法

        万一有人碰巧遇到类似问题(似乎可能,但可能不太可能),我最近偶然发现了解决方案。在我的\“ DbAdapter \”的insert方法中,我(愚蠢地)通过查询来查询其中一个字段具有给定值的行的唯一性,并查看该查询是否返回了任何行。这是在创建一个我没有关闭的游标,导致了上面提到的“最终定标”错误。     ,        我之前已收到该错误,因此不得不使用cursor.close()来更正此问题。我不确定为什么,因为有时候我没有使用close()并且没有收到错误。也许这是一条警告,只有当它停在表演停止错误旁边时才会被注意到吗? 我会说正确的过程是打开数据库连接->通过运行db方法创建游标->通过游标进行迭代->关闭游标->关闭数据库连接。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...