2014-12-16 3 views
0

У меня проблема с памятью, которую я не могу понять.Ошибка курсора SQLite: Недостаточно памяти

12-17 00:03:10.603: E/AndroidRuntime(19910): android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=723 (# cursors opened by this proc=723) 

Это происходит, только когда я обновляю страницу 15-20 раз (каждый раз создавайте что-то вроде 30 запросов).

 Cursor c; 

     for(w = 0; w < 30; w++) 
     { 
      ... 
      c = dataBase.fetchA(); 

      int valueColIncome = c.getColumnIndex(myDatabase.IEMetaData.IE_VALUE); 

      if(c.moveToFirst()) 
      { 
       do    
       { 
        ... 
       }while(c.moveToNext()); 
      } 

      c = dataBase.fetchB(); 

      if(c.moveToFirst()) 
      { 
       do    
       {     
        ... 
       }while(c.moveToNext()); 
      } 
      ...     
     } 
     c.close(); 

Я также пытаюсь создать курсор для каждой петли в for и затем закрыть его, но ничего не изменилось. Когда я обновляю эту активность более чем в 15 раз, это исключение.

+0

См http://stackoverflow.com/questions/11340257/sqlite-android-database-cursor-window-allocation -of-2048 т.п.н.-неудачная –

ответ

0

Закрой курсоры !:

for(w = 0; w < 30; w++) 
    { 
     ... 
     c = dataBase.fetchA(); 

     int valueColIncome = c.getColumnIndex(myDatabase.IEMetaData.IE_VALUE); 

     if(c.moveToFirst()) 
     { 
      do    
      { 
       ... 
      }while(c.moveToNext()); 
     } 
     c.close(); 

     c = dataBase.fetchB(); 

     if(c.moveToFirst()) 
     { 
      do    
      {     
       ... 
      }while(c.moveToNext()); 
     } 
     c.close(); 
     ...     
    } 

Most often the cause for this error are non closed cursors.

0

@Jorgesys ответ в основном делается. Я думаю, что это должно решить проблему.
Причина в том, Cursor не близко каждый раз, но лучше иметь

for() { 
Cursor c; 
..... 
c.close(); 
} 

Одна вещь, чтобы помнить, что, андроида курсора окна ограничивается 2Mb.
Поэтому, когда вы запрашиваете данные (особенно BLOB), размер не должен быть больше ограничения.
Чтобы решить эту проблему, разрыва вы запроса на более мелкие части или подумайте еще раз дизайн-DB

Смежные вопросы