gpt4 book ai didi

Android SQLite CursorWindowAllocationException 崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:18 30 4
gpt4 key购买 nike

当我发出大量 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();
}

有谁知道可能导致这种情况的原因 - 似乎是内存泄漏(也许?)但有什么方法可以防止它发生吗?

谢谢

最佳答案

此错误的最常见原因是游标未关闭。确保在使用后关闭所有游标(即使出现错误)。

Cursor cursor = null;
try {
cursor = db.query(...
// do some work with the cursor here. i.e.:
while (cursor.moveToNext())
{ .... }
} finally {
// this gets called even if there is an exception somewhere above
if(cursor != null)
cursor.close();
}

关于Android SQLite CursorWindowAllocationException 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12029437/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com