android.database.CursorWindowAllocationException when moving a Cursor

16,757

This error is nearly always due to not closing a cursor when it's finished with. Every time you open a cursor, memory is required to map the data that cursor represents and that memory cannot be released until the cursor is closed. There is a limit to the amount of memory available for this purpose so if cursors are not closed and an application continues to open new ones, this error is likely to occur at some point.

I recommend you examine your code to make sure that all cursors created are being closed at some point. Also take care with any code that opens a cursor within a loop - your error message says 'open Cursors=736' which suggests a lot of cursor activity within a loop of some sort.

Share:
16,757

Related videos on Youtube

Zelig63
Author by

Zelig63

Updated on June 14, 2022

Comments

  • Zelig63
    Zelig63 almost 2 years

    I'am using an SQLite database and I regularly get runtime errors I can't find the origin of. After a query, I use moveToFirst to point on the first record retrieved and this sometimes triggers an android.database.CursorWindowAllocationException exception. Added to this exception is the following sentence : "Cursor window allocation of 2048kb failed.# open Cursors=736 (#cursors opendby this proc=736)".

    In the Android documentation, I haven't found anything related to this exception yet. Does anyone know it's cause and a way to avoid it?

  • Rarw
    Rarw over 9 years
    Great point. This helped me find a careless error of using a double loop with a cursor. Pure havoc.
  • themarketka
    themarketka over 9 years
    This happens to me as well, but it reads Open Cursors=2, and I only query for a new cursor when the old one reports false from isClosed()… which is weird then.
  • Sivakumar S
    Sivakumar S almost 8 years
    The same issue happens to me and i could see Open Cursors =1. Any hints from anyone?
  • manfcas
    manfcas over 5 years
    Maybe some sort of OutOfMemoryError?
  • Kishita Variya
    Kishita Variya about 5 years
    How can we close cursor in case of queryBuilder.query(); ?