光标或数据库未关闭错误

时间:2011-10-26 23:39:10

标签: android sqlite

我使用sqlite创建了一些多活动数据库应用程序, 但我在logcat中收到错误消息,如

  

完成尚未停用或关闭的光标   或数据库未关闭错误

我的应用似乎运行良好。 我试图使用onDestroy或查询后或更改活动来关闭光标和数据库, 但随后应用程序崩溃或我得到空指针异常或空列表视图。

我想知道如果我只是保留原样可以面对的问题, 比如数据库损坏或与其他应用程序的干涉。

我也想知道是否假设我声明了游标

protected Cursor a_cursor;

在第一个活动中,我是否需要在下一个活动中使用相同的声明 或者我需要使用

protected Cursor b_cursor;

类似于第一个活动中的DbHelper,Context,Sqlitedatabase等

 private SQLiteDatabase adb;
 private DatabaseHelper aDbHelper;
    private final Context aCtx; 

 private SQLiteDatabase bdb;
 private DatabaseHelper bDbHelper;
    private final Context bCtx;
第二项活动

程序的结构就像这样

DatabaseHelper - 创建一些表或升级

DbAdapter - 插入或更新表

Activity1 - 搜索表和列表视图 - 在列表项上单击--Activity2, 上下文菜单,将一些细节添加到第二个表

活动2 - 活动3的项目详细信息和按钮

活动3 - 编辑项目 - 返回

活动4 - 第二表列表视图

活动5 - 数据库导入导出

对不起,如果我的问题看起来过于愚蠢或原始 但我不是程序员,这些应用程序仅供我个人使用 不适合市场​​

实际上我没有找到一个完整的例子来满足我的需求 所以我只是添加了许多例子中的位和peices来完成任务

2 个答案:

答案 0 :(得分:2)

过去我们会说使用managedQuery来处理这些问题。但是自从CursorLoader添加后,我建议使用它来保持一切顺利。直到API Level-10才添加游标加载器,但您仍然可以通过Support Package在较低的API级别上使用它。

有关使用CursorLoader的示例,您可以查看此Example(或相应的full-fledged example。)

答案 1 :(得分:0)

填充光标时,尝试这样做

Cursor c;
try {
   c = managedQuery...
   lv.setAdapter(c);
} catch(...) {
} finally {
   if(null!=c)
   c.close()
}