我使用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来完成任务
答案 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()
}