2014-01-19 35 views
8

我使用SQLite數據庫,我經常得到運行時錯誤我找不到原點。查詢後,我使用moveToFirst指向檢索到的第一條記錄,這有時會觸發android.database.CursorWindowAllocationException異常。添加到這個例外是下面的句子:「遊標窗口分配2048kb失敗。#打開遊標= 736(#cursors opendby this proc = 736)」。android.database.CursorWindowAllocationException當移動一個光標

在Android文檔中,我還沒有發現任何與此異常相關的內容。有誰知道它的原因和避免它的方法?

+0

顯示您的日誌貓 – Android

回答

23

該錯誤幾乎總是由於在完成時沒有關閉遊標。每次打開遊標時,都需要內存來映射遊標所代表的數據,並且在遊標關閉之前內存不能被釋放。可用於此目的的內存量有限制,所以如果遊標未關閉並且應用程序繼續打開新的內存,則此錯誤很可能在某個時間點發生。

我建議你檢查一下你的代碼,以確保所創建的所有遊標都在某個時刻被關閉。還要注意在循環中打開遊標的任何代碼 - 您的錯誤消息說'打開遊標= 736',這表明在某種循環內有很多遊標活動。

+0

偉大的一點。這幫助我發現了在遊標中使用雙循環的粗心錯誤。純粹的破壞。 – Rarw

+0

這種情況也發生在我身上,但是它讀取'Open Cursors = 2',並且當舊的從'isClosed()'報告錯誤時,我只查詢一個新的遊標......這很奇怪。 – themarketka

+0

同樣的問題發生在我身上,我可以看到'Open Cursors = 1'。任何人的提示? –