アプリケーションを実行すると、アプリケーションでデータベースを使用しています。次のエラーが表示されます
android.database.sqlite.DatabaseObjectNotClosedException: アプリケーションは、ここで開かれたカーソルまたはデータベース オブジェクトを閉じませんでした
このエラーの解決方法を教えてください
アプリケーションを実行すると、アプリケーションでデータベースを使用しています。次のエラーが表示されます
android.database.sqlite.DatabaseObjectNotClosedException: アプリケーションは、ここで開かれたカーソルまたはデータベース オブジェクトを閉じませんでした
このエラーの解決方法を教えてください
in your mainclass call this method
db.close();
add this method to your helperclass
@Override
public synchronized void close() {
if(db != null){
db.close();
super.close();
}
}
More information about Andorid Sqlite Database
使用後にデータベースを閉じていません。したがって、以下のステートメントを使用してデータベースを閉じる必要があります。
db.close();
トランザクションを実行した後は、常にカーソルと Db を閉じる必要があります。
また、例外が発生した場合にも忘れずに閉じてください。
SQLite Helper クラスを拡張しているクラスで、次のように実装する必要があります。
@Override
public synchronized void close() {
if(db != null){
db.close();
super.close();
}
}
データベースをシングルトンにすることで、データベースの開閉を完全に回避できます。これは、Android で推奨されるアプローチです。
複数のスレッドを介してデータベースにアクセスする場合、問題はさらに悪化します。
単一の開いているデータベースを維持する方法の例については、この質問を確認してくださいAndroid SQLite DB いつ閉じるか
これで問題は解決しますが、これを処理するローダー API を使用していない限り、完了したらカーソルを閉じる必要があります。