Sqlite最终确定游标尚未停用或关闭

时间:2011-03-19 05:40:57

标签: android sqlite

这有什么奇怪的,每次都不会发生。我正在向数据库添加一些东西,如果我这样做几次没有任何反应,但如果我继续添加并继续添加此错误消息发生。有时它会在第二次发生,而其他时间则不会发生直到第5次。这似乎是随机的。任何人都知道为什么按下相同的按钮组合不会每次都会导致此错误消息?

3 个答案:

答案 0 :(得分:2)

首先将光标放在onDestroy和onStop上,如下所示:

 if(mCursor!= null && !mCursor.isClosed())
       mCursor.close();

然后尝试在使用游标对象之后调用startManagingCursor(cursor),如果使用它来进行查询等,请在使用游标进行操作后调用它。

答案 1 :(得分:2)

在从ListView的sqlite数据库获取数据时,您可能遇到了同样的问题。

  1. 如果在完成后关闭光标...... ListView为空白。

  2. 如果您不关闭光标...... ListView会偶尔产生您看到的错误。

  3. 解决方案?将光标全局化为您的类...并且只关闭它一次:当您完全使用它时。 (在onDestroy和/或onStop内部。)

    我不确定为什么#1会发生。 (我尽量避免使用全局变量。但是在这里无法避免。)

答案 2 :(得分:1)

您应该在错误之前看到以下内容:

D/dalvikvm(  285): GC_FOR_MALLOC freed

它表明android机器正在释放潜在的泄漏以获得更多内存。您的光标也是泄漏,因为您没有使用<cursor>.close();

正确关闭它