2011-12-21 5 views
1

net에서 많이 검색했지만 내 쿼리에 대한 대답을 찾을 수 없습니다.java.lang.IllegalStateException를 얻는 중 : 이미 닫힌 객체를 다시 열려고 시도합니다. android에서 커서를 사용할 때

DB에서 데이터를 가져 오는 데 Cursor를 사용하고 있습니다. (지도의 오버레이 마커에 대한 정보) 이 데이터의 도움으로지도를로드하고 있습니다. 커서를 통한 DB와의 상호 작용은 asyncTask에서 수행됩니다. 커서가지도를로드를 실행하는 동안 내가 버튼을 다시 누르면

지금 여기에 내가

직면하고있는 문제 (즉 while 루프에서로드 오버레이 마커의 중간에)이 오류를 얻을

여기

Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT _id, category, latitude, longitude FROM node) 
내가 AsyncTask를

,536,913,632 코드의 스냅 샷 사용하고있다 여기

12-21 11:11:30.173: E/AndroidRuntime(2824): FATAL EXCEPTION: AsyncTask #5 
12-21 11:11:30.173: E/AndroidRuntime(2824): java.lang.RuntimeException: An error occured while executing doInBackground() 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.lang.Thread.run(Thread.java:1102) 
12-21 11:11:30.173: E/AndroidRuntime(2824): Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT _id, category, latitude, longitude FROM node) 
12-21 11:11:30.173: E/AndroidRuntime(2824): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:34) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:64) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:299) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.database.sqlite.SQLiteCursor.onMove(SQLiteCursor.java:271) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:188) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.database.AbstractCursor.moveToNext(AbstractCursor.java:256) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at org.mid.kew.activities.MapPageActivity$MapLoadingAsyncTask.doInBackground(MapPageActivity.java:632) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at org.mid.kew.activities.MapPageActivity$MapLoadingAsyncTask.doInBackground(MapPageActivity.java:1) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
12-21 11:11:30.173: E/AndroidRuntime(2824):  ... 4 more 

의 전체 추적하고 DoInBackground 방법

openKewDataBase(); 
Cursor cursor = getCursorForOverLayIcons(); 
startManagingCursor(cursor); 
cursor.moveToFirst(); 
while (!cursor.isAfterLast()) { 
      ... 

    cursor.moveToNext(); 
} 

cursor.close(); 

onPostExecute 방법

.... 

closeKewDataBase(); 

에서 나는 그것에서 충돌 추적 할 수 당으로 10 이하

"cursor.moveToNext();"

수동 cursor.close()로 커서를 폐쇄됨에 따라이

답변

1

고정 누구의 도움, 당신은 startManagingCursor(cursor)를 호출하지 않아야 수 있습니다. 둘 중 하나를 선택해야합니다. 당신이 AsyncTask에서이 일을하는 것처럼

, 당신은 거의 확실 AsyncTaskActivity 오래 살 수 둘러싸는 Activity 당신을 위해 커서를 관리하지 않습니다. 그냥 수동으로하십시오.

가 (필자는 AsyncTaskActivity의 내부 클래스입니다 가정.)

+0

문제가 해결 ... 당신에게 그레이엄 볼랜드 – Nik

+0

안녕 그레이엄 난 당신이 확인할 수 있습니다 .. 같은 문제에 직면하고 감사 [내 게시물 (HTTP : //stackoverflow.com/questions/11633581/attempt-to-re-open-an-already-closed-object-java-lang-legalstateexception/11633761#comment15427898_11633761)하시기 바랍니다. – GoCrazy

관련 문제