Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android SQLite CursorWindowAllocationException崩溃大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一种情况,当我发出一些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崩溃全部内容,希望文章能够帮你解决Android SQLite CursorWindowAllocationException崩溃所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。