如何在代码中处理游标上的IllegalStateException?

3

当我调试我的应用程序时,突然弹出了这个错误。

我该如何处理这种错误?

我不知道是在哪里和如何引起的。

Daemon System Thread [<5> HeapWorker] (Suspended (exception IllegalStateException)) 
    SQLiteCursor.finalize() line: 603   
    NativeStart.run() line: not available [native method]   

您需要让程序崩溃,以便获取Java堆栈跟踪信息,找出错误发生的位置。 - CommonsWare
我让程序崩溃了,但是只有这个出现在我的日志中。我的应用程序没有焦点。 - Pentium10
2个回答

5

使用managedQuery()函数来查询数据。如果您使用managedQuery()而不是query(),那么Activity将保留Cursor的引用,并在不使用它时自动关闭它。


我如何定位不是由managedQuery启动的光标? - Pentium10
我不知道如何定位未由managedQuery()启动的光标。顺便说一下,您可以为所有访问的光标调用startManagingCursor()(活动方法)。它将确保活动处理所有光标管理。 - Karan
如果我在本地使用游标,并且我关闭了它,那么我需要管理它吗? - Pentium10
1
任何已打开但未传递给startManagingCursor()的游标都必须由您自己关闭。如果您关闭了所有游标,那个错误就不应该在您的PID下显示出来。 - Al.
该方法已被弃用,请使用CursorLoader替代。 - paiego

1
我在使用 SQLiteDatabase Cursor 时遇到了相同的两行异常和堆栈跟踪,因为我在填充本地数据库结构后忘记关闭游标。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接