Android java.lang.IllegalStateException:cand';初始化光标窗口
我在google play崩溃报告中有此错误,不知道如何修复:Android java.lang.IllegalStateException:cand';初始化光标窗口,android,database,cursor,android-sqlite,illegalstateexception,Android,Database,Cursor,Android Sqlite,Illegalstateexception,我在google play崩溃报告中有此错误,不知道如何修复: java.lang.IllegalStateException: Couldn't init cursor window at android.database.CursorWindow.native_init(Native Method) at android.database.CursorWindow.<init>(CursorWindow.java:41) at android.database.sqlite.SQ
java.lang.IllegalStateException: Couldn't init cursor window
at android.database.CursorWindow.native_init(Native Method)
at android.database.CursorWindow.<init>(CursorWindow.java:41)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:276)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:268)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
at com.jim2.UpdateService.restaureNotifications(UpdateService.java:274)
at com.jim2.helpers.Globals.updateWidgets(Globals.java:1011)
at com.jim2.helpers.Globals.onReceive(Globals.java:746)
at com.jim2.UpdateService$5.onSignalStrengthsChanged(UpdateService.java:747)
at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:387)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3693)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
at dalvik.system.NativeStart.main(Native Method)
下面是从getNotifications获取光标的代码:
public Cursor getNotifications(boolean all) {
//removeAllNotifications();
Cursor c;
String fields[] = new String[] { "id", "ordre", "is_active"};
String where = "is_active = 1";
if(all)where = "";
c = myDataBase.query(TABLE, fields, where, null, null, null, "ordre");
return c;
}
我的问题是我无法重现崩溃,因此很难修复设备上的原因,因为所有设备都正常工作
已经看到了这篇文章,但我在moveToFirst上崩溃了,我已经在答案中添加了代码
非常感谢不确定,但不应该是吗
c = myDataBase.query(TABLE, fields, where, null, null, null, "ordre DESC")
此异常由本机代码引发。(请参阅) 主要原因是无法为正在创建的新游标分配内存。因此,我的猜测是,您正在获取的数据有时获取的数据太多(内存中的数据几乎超过1M),或者您正在打开大量光标而不关闭它们,直到内存耗尽以分配新的缓冲区为止
finally
子句中关闭所有游标让我知道这是否有帮助。无原因ordre是一个字段,它不是顺序,我希望0到x,所以它是ASC(或无原因,因为它是默认值),非常感谢!!!我无法测试,因为我无法重现错误,但我检查了代码,忘记了一些close(),所以我认为是这样(我希望如此)。这不可能是我的数据,因为我最多有5行和3个字段^^嗨,我已经在google play上进行了更新,异常仍然存在:(我有搜索功能,现在我所有的游标都关闭了。你有其他办法解决这个问题吗?我很确定悬空的未关闭的游标是导致这个错误的主要原因。每个打开的游标都会分配1M的内存,直到没有空间为止。请让其他人(另一只眼睛)看看)查看您的代码。请让我知道您发现了什么。好的,我将再次查看,并尝试向其他人显示我的代码以确保。目前我只有一个上一版本的报告,因此可能是上一版本的非关闭光标造成了此崩溃…有可能吗?我始终存在崩溃:(但我认为这是一个内存问题,就像你说的。但这个内存问题不再是由非闭合光标引起的。我不知道如何找到内存问题的位置:(
c = myDataBase.query(TABLE, fields, where, null, null, null, "ordre DESC")