2013-09-24 3 views
0

asynctask 안에 handler.postdelayed (r, 30000)를 통해 실행 파일을 실행하는 일부 DB 항목을 실행합니다. 반복됩니다 (30 초마다 볼 수 있듯이).asynctask 내부의 SqLite 데이터베이스 오류

때로는 매번 앱이 다운되지 않는 경우가 있습니다. 아래는 logcat입니다.

09-24 18:28:52.813: W/dalvikvm(6194): threadid=12: thread exiting with uncaught exception (group=0x40daf1f8) 
09-24 18:28:52.823: E/AndroidRuntime(6194): FATAL EXCEPTION: AsyncTask #2 
09-24 18:28:52.823: E/AndroidRuntime(6194): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.os.AsyncTask$3.done(AsyncTask.java:278) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.lang.Thread.run(Thread.java:856) 
09-24 18:28:52.823: E/AndroidRuntime(6194): Caused by: java.lang.IllegalStateException: database /data/data/com.myApp/databases/mydb.db (conn# 0) already closed 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2100) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:418) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:405) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:156) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at com.myApp.DbAllHelper.dbMethod1(DbAllHelper.java:273) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at com.myApp.DbAllHelper.dbMethod2(DbAllHelper.java:582) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at com.myApp.MainActivity$checkToInternetOnly.doInBackground(MainActivity.java:278) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at com.myApp.MainActivity$checkToInternetOnly.doInBackground(MainActivity.java:1) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
09-24 18:28:52.823: E/AndroidRuntime(6194):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 

답변

1

데이터베이스가 이미 닫혀 있기 때문에 logcatIllegalStateException 어딘가에 나타납니다. 작업을 완료하기 전에 데이터베이스를 닫기 전에 백그라운드 작업이 취소되었는지 확인하십시오 (onDestroy 작업 완료).

1
09-24 18:28:52.823: E/AndroidRuntime(6194): Caused by: java.lang.IllegalStateException: database /data/data/com.myApp/databases/mydb.db (conn# 0) already closed 

사용하기 전에 실수로 커서를 닫지 않았습니까? 그 또는 어떤 시점에서 두 번 시작된 기회가 asynctask입니까?

이유가 무엇이든간에 어떤 시점의 코드는 닫힌 커서에 액세스하려고 시도하는 것 같습니다.

관련 문제