6

I have an ListActivitythat is bound to a cursor, when items in the ListVieware selected an EditItemactivity is launched by startActivityForResult, this EditItemactivity preforms several queries, each placed in their own separate Cursor. 这些用于填充微调器,很像 Access DB 中的查找字段。

我的问题是,一旦用户EditItem通过提交、取消或返回按钮离开此活动,就会返回活动并在(相同或不同的项目)ListView中选择另一个条目,我在课堂上遇到错误(Android 的,不是我的)。我两个活动的方法中都关闭了我的游标,因为有时调用结果仍会破坏调用活动。 ListViewIllegalStateExceptionSQLiteCursoronDestroy

这并不总是发生在第二次选择项目时,有时会发生在第三次选择时。我想也许我只是比操作系统移动得更快,所以我开始在我的动作之间暂停长达 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]   

编辑来自 LogCat 的 #3 堆栈跟踪(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)
4

1 回答 1

16

确保你cursor.close()用完它们。

于 2011-05-23T05:51:46.620 回答