【问题标题】:Sqlite Finalizing a cursor has not been deactivated or closedSqlite 终结游标尚未停用或关闭
【发布时间】:2012-01-31 04:22:17
【问题描述】:

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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    首先关闭 onDestroy 和 onStop 中的光标,如下所示:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      解决方案?使光标对您的班级具有全局性......并且只关闭一次:当您完全完成它时。 (在 onDestroy 和/或 onStop 内)。

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

      【讨论】:

        【解决方案3】:

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

        D/dalvikvm(  285): GC_FOR_MALLOC freed
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-22
          • 1970-01-01
          • 1970-01-01
          • 2012-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多