2

LoaderManager.LoaderCallbacksを実装するListFragmentでデータベースリソースを開いたり閉じたりするのに最適な場所はどれですか?

を実装するリストフラグメントがありますLoaderManager.LoaderCallbacks<Cursor>。ここで、ローダーを初期化し、ローダー(MyLoader)onActivityCreatedを返しました。onCreateLoaderMyLoaderクラスはデータベースリソースを開きます。その後、Cursorオブジェクトがに返され onLoadFinishedます。カーソルがonLoadFinishedに戻る前にデータベースを閉じることができないため、ここで開いているデータベースを閉じることができます。

多くの人が、Activity onResumeでデータベースリソースを開き、onPauseで閉じるのが最善だと言いましたが、AsynctaskLoadersを使用する場合、データベースリソースを閉じる方法は?

次のエラーが発生しました、

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

1 に答える 1

1

データベースでの操作を完了した後でなければなりcloseません。すべてのでデータベースのオープン/クローズを呼び出すのではなく、すべてのアクティビティにCursor共通を利用するようにしてくださいSQLiteOpenHelperこれActivityを見てください) 。

于 2012-12-20T12:07:14.203 に答える