正常に機能し、強制終了またはクラッシュしないアプリがあります。しかし、LogCat を見ると、ときどき次のように表示されます。
05-20 15:24:55.338: E/SQLiteDatabase(12707): close() was never explicitly called on database '/data/data/com.---.--/databases/debt.db'
05-20 15:24:55.338: E/SQLiteDatabase(12707): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
少し下...
05-20 15:24:55.338: E/System(12707): Uncaught exception thrown by finalizer
05-20 15:24:55.338: E/System(12707): java.lang.IllegalStateException: Don't have database lock!
データベースを開いたり閉じたりするタイミングがわかりません。
単なるスプラッシュ スクリーンである Main アクティビティがあります。次に、DB からの情報を使用して ListView を呼び出すアクティビティに入ります。したがって、DB が最初に開かれるのはこのアクティビティです。
ListView を使用して分岐する DB が必要な別のアクティビティもあります。これをいつ開いて閉じることになっていますか?一度開くだけで、アプリが「一時停止」、「停止」、または「破棄」されたときに閉じる必要があるようです。
この場合、db.close() メソッドをどこに配置しますか... onStop などが配置されているスプラッシュ スクリーンのメイン アクティビティに配置しますか? またはDBを開くアクティビティと同じですか?または..別の場所はありますか?
アップデート:
これは、エラーが指し続けるコードの行です。
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}