6

カーソルにListActivityバインドされた があり、 内のアイテムListViewが選択されたときにEditItemアクティビティが起動されstartActivityForResult、このEditItemアクティビティはいくつかのクエリを実行し、それぞれが独自の個別のカーソルに配置されます。これらは、Access DB のルックアップ フィールドのように、スピナーを設定するために使用されます。

私の問題は、ユーザーがEditItem送信、キャンセル、または戻るボタンのいずれかを介してこのアクティビティを終了すると、アクティビティに戻り、 (同じ項目またはListView別の項目) で別のエントリを選択すると、クラス (私のものではなく Android ) でエラーが発生することです。 )。結果を呼び出すと呼び出し元のアクティビティが破壊されることがあるため、両方のアクティビティ のメソッドでカーソルを閉じていますListViewIllegalStateExceptionSQLiteCursoronDestroy

これはアイテムの 2 回目の選択で常に発生するわけではなく、3 回目の選択で発生する場合があります。OSよりも速く動いているだけかもしれないと思ったので、アクションの間に最大30秒の一時停止を開始しました。エラーは、結果のアクティビティを2回または3回呼び出した後にのみスローされます。一時停止してもこれは修正されません。

編集:エラーはSQLiteCursor finalize呼び出し時のメソッドにありますsuper.finalize();

編集 #2:スレッドのスタック トレース:

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

#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)
4

1 に答える 1

16

cursor.close()それらを使い終わったら、必ず確認してください。

于 2011-05-23T05:51:46.620 に答える