5

複数の cursor.moveToNext() リクエストを行うと、プログラムがクラッシュする状況があります。エラーメッセージは次のとおりです。

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=773 (# cursors opened by this proc=773)
at android.database.CursorWindow.<init>(CursorWindow.java:112)
at android.database.CursorWindow.<init>(CursorWindow.java:100)
at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)
at android.database.sqlite.SQLiteCursor.clearOrCreateWindow(SQLiteCursor.java:364)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:162)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:161)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:209)
at net.cunniman.teacherplannerlite.SchoolClassDataSource.getClassForDayView(SchoolClassDataSource.java:173)
at net.cunniman.teacherplannerlite.DayView.getSchoolClasses(DayView.java:200)
at net.cunniman.teacherplannerlite.DayView.displayDate(DayView.java:176)
at net.cunniman.teacherplannerlite.DayView.plusDay(DayView.java:287)
at net.cunniman.teacherplannerlite.DayView.onClick(DayView.java:93)
at android.view.View.performClick(View.java:3565)
at android.view.View$PerformClick.run(View.java:14165)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4514)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
at dalvik.system.NativeStart.main(Native Method)

try {
    this.openForRead();
    for (int day_counter = 0; day_counter < DAY_PERIOD.length/2; day_counter++)
    {
        Cursor cursor = database.rawQuery
            ("SELECT " + NAME + " FROM " + TABLE_NAME + " WHERE " + DAY_PERIOD[day_counter * 2]
            + " = '" + day + "' AND " + DAY_PERIOD[day_counter * 2 + 1] + " = "
            + Integer.toString(period), null);


    while (cursor.moveToNext())
    {
        String name = cursor.getString(0);
        sc.setName(name);
    }


} finally {
    this.close();
}

これを引き起こしている可能性があることを誰かが知っていますか - メモリリークのようです (多分?) が、それを防ぐ方法はありますか?

ありがとう

4

1 に答える 1