在SQLiteCursor for Android中防止IllegalStateException

Tim*_*mar 6 sqlite android cursor

我有一个ListActivity绑定到游标的东西,当ListView选择了一个EditItem活动被启动的项时startActivityForResult,这个EditItem活动预先形成了几个查询,每个查询都放在它们各自的Cursor中.这些用于填充微调器,非常类似于Access DB中的查找字段.

我的问题是,一旦用户离开此EditItem活动,通过提交,取消或返回按钮,返回到ListView活动并选择ListView(相同项目或不同的项目)中的另一个条目我IllegalStateException在我的SQLiteCursor课程中得到错误(Android的,而不是我的).我合我的游标的onDestroy方法活动,因为有时呼吁的结果仍然会破坏调用活动.

这并不总是出现在第二个项目选择上,有时它会出现在第三个选择上.我想也许我的速度比操作系统快,所以我开始暂停,最多30秒,在我的动作之间,只有在第二次或第三次调用活动结果后才会抛出错误.没有多少暂停修复此问题.

编辑:错误在SQLiteCursor finalize调用方法中super.finalize();

编辑#2:线程的堆栈跟踪:

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

编辑#3 LogCat的堆栈跟踪(partslist是表名):

INFO/dalvikvm(599): Ljava/lang/IllegalStateException;: Finalizing cursor android.database.sqlite.SQLiteCursor@437541a0 on partslist that has not been deactivated or closed
INFO/dalvikvm(599):     at android.database.sqlite.SQLiteCursor.finalize(SQLiteCursor.java:596)
INFO/dalvikvm(599):     at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)

Mat*_*lly 16

完成后确保你cursor.close().

  • 在这种情况下,如果@CommonsWare不想添加将被接受的答案,那么IMO作为社区成员,您有责任用正确答案回答您自己的问题并自己接受.该社区基于问题/解决方案.虽然您的解决方案在评论中,但它应该是一个答案. (2认同)