2011-03-19 60 views
0

有什么奇怪的是它并不是每次都发生。我正在给数据库添加一些东西,如果我这样做了几次没有任何反应,但是如果我继续添加并且继续添加这个错误消息就会发生。有时会发生在第二次,而其他时间则不会发生在第五次。这似乎是随机的。任何人都有任何想法,为什么按下相同的按钮组合不会每次都会导致此错误消息?Sqlite完成游标还没有被关闭或关闭

回答

1

你应该看到的错误之前执行以下操作:

D/dalvikvm( 285): GC_FOR_MALLOC freed 

这表明,Android机正在释放潜在的泄漏得到更多的内存。你的光标也是一个泄漏,因为你没有用<cursor>.close()正确关闭它;

2

首先关闭的onDestroy和的onStop光标这样的:

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

,然后尝试调用startManagingCursor(cursor)后,你用你的光标对象,如果你用它来进行查询,等等,称之为后您使用光标进行的操作。

2

你可能会遇到同样的问题,当我从一个ListView的sqlite数据库获取数据。

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

  2. 如果你不关闭游标... ListView将偶尔产生你所看到的错误。

解决方案?将光标放到你的班级,并且只关闭一次:当你完全用它做完。 (在onDestroy和/或onStop中)。

我不知道为什么#1发生。 (我尽量避免使用全局变量,但在这里不能避免。)