2

LoaderManager.LoaderCallbacks를 구현하는 ListFragment에서 데이터베이스 리소스를 열고 닫는 가장 좋은 장소는 어디입니까?은 비동기 작업 로더로 목록 조각에서 데이터베이스 리소스를 열고 닫을 수있는 곳입니다

LoaderManager.LoaderCallbacks<Cursor>을 구현하는 목록 조각이 있습니다. 이제 onActivityCreated에 초기화 로더가 있고 onCreateLoader에 로더 (MyLoader)가 반환되었습니다. MyLoader 클래스는 데이터베이스 자원을 엽니 다. 커서 객체는 onLoadFinished으로 반환되었습니다. 여기 커서가 onLoadFinished로 돌아 가기 전에 데이터베이스를 닫을 수 없기 때문에 어디에서 열린 데이터베이스를 닫을 수 있습니까?

많은 사람들이 활동 onResume의 데이터베이스 리소스를 열고 onPause를 닫는 것이 좋습니다.하지만 데이터베이스 리소스를 닫는 방법을 AsynctaskLoaders로하면? 당신이 데이터베이스에 UR 작업을 완료 한 후 나는 오류 다음있어

,

close() was never explicitly called on database 'mydb' 
android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849) 

답변

1

당신은 closeCursor에 있습니다. 모든 Activity에서 데이터베이스 열기/닫기를 호출하는 대신 모든 활동에 공용 SQLiteOpenHelper (this)을 사용하도록하십시오.

+0

예 이미 모든 활동에 공통 인 SqliteOpenHelper 클래스가 있습니다 .I simplecursorLoader를 확장하는 로더 클래스가 있습니다. 다음과 같이 초기화 된 로더 클래스에서 DBHelper myDbHelper = new DBHelper (context); SQLiteDatabase myDB = myDbHelper.getWritableDatabase(); 이 로더 클래스는 커서 객체를 반환합니다. 그런 다음 myDbHelper와 myDB를 닫습니다. – Ramprasad

관련 문제