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