1
我得到這個錯誤:的Android CursorWindowAllocationException
E/AndroidRuntime(8223): Caused by: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=940 (# cursors opened by this proc=940)
我知道它可能是因爲我使用的遊標以錯誤的方式或者沒有在合適的時間關閉它。我想這可能是因爲我在填充同一個遊標而沒有關閉/清空它?
public static void NextAlarmTxt(){
int dan = c.get(Calendar.DAY_OF_WEEK);
long trenutnovrijeme = c.getTimeInMillis();
long bazavrijeme;
long pamti = 0;
String danString = dani(dan);
Cursor CursorDan = DatabaseManager.getAllDataDay(danString);
CursorDan.moveToFirst();
if (!CursorDan.isAfterLast())
{
do
{
bazavrijeme = CursorDan.getInt(2);
if (trenutnovrijeme<bazavrijeme)
{
if (pamti==0)
{
pamti = bazavrijeme;
}
if (pamti>0)
{
if (pamti > bazavrijeme)
{
pamti = bazavrijeme;
}
}
}
if (trenutnovrijeme > bazavrijeme)
{
dan = dan+1;
dani(dan);
CursorDan = DatabaseManager.getAllDataDay(danString);
}
}
while (CursorDan.moveToNext());
}
CursorDan.close();
text1.setText(new StringBuilder("Sljedeći : ").append(pamti).toString());
}
public static String dani(int dan){
String danString = null;
if (dan==1)
{
danString = "Nedjelja";
}
else if (dan==2)
{
danString = "Ponedjeljak";
}
else if (dan==3)
{
danString = "Utorak";
}
else if (dan==4)
{
danString = "Srijeda";
}
else if (dan==5)
{
danString = "Četvrtak";
}
else if (dan==6)
{
danString = "Petak";
}
else if (dan==7)
{
danString = "Subota";
}
return danString;
}
移動新的遊標的第一個項目有什麼辦法,我可以使用相同的光標/覆蓋它在一個正確的方法,所以我不必做一個全新的光標? – user1880779 2013-02-20 23:25:34
它只是您需要清理的舊遊標的引用,從您發佈的代碼開始,它看起來像DatabaseManager.getAllDataDay(...)必須始終返回一個新的遊標。 – 2013-02-20 23:28:06
是的,但我如何使用相同的遊標名稱(因爲同樣的名字將再次用於「if」語句中)與我試圖獲得的新數據?我只關閉CursorDan遊標和CursorDan = DatabaseManager.getAllDataDay(danString);再次或? – user1880779 2013-02-20 23:55:03