2011-03-19 58 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發生。 (我儘量避免使用全局變量,但在這裏不能避免。)