1

私はを使用していSQLiteOpenHelperます。アプリケーションが正常に閉じられると、データベースもメソッドonDestroy()で正常に閉じられます。強制的に閉じると、データベースは開いたままになり、後で、アプリケーションがを使用してデータベースを読み取ろうとするgetReadableDatabase()と、次のメッセージが表示されてクラッシュしました。

09-26 13:45:30.995: ERROR/Database(12632): close() was never explicitly called on database

LogCatの全文は次のとおりです。

09-27 03:10:04.331: ERROR/Database(391): close() was never explicitly called on database '/data/data/myApplication/databases/DownloadDatabase1' 
09-27 03:10:04.331: ERROR/Database(391): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
09-27 03:10:04.331: ERROR/Database(391):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
09-27 03:10:04.331: ERROR/Database(391):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)

スタックトレースをたどりましたが、例外は次のコード行が原因だと思います。

setLocale(Locale.getDefault());

上記のコードは、ファイルSQLiteDatabase.javaからのものです。この問題を解決する方法について何か提案はありますか?

4

2 に答える 2

2

そのエラーが発生しても、データベースにアクセスできるはずです。基礎となるコードを見ると、私の理解では、このようなエラーによってプログラムが終了することはありません: http://hi-android.info/src/android/database/sqlite/SQLiteDatabase.java.html

finalize()そこで方法を確認してください。ご覧のとおり、クリーンアップを試みるだけで、例外はスローされません。

どこかで問題を抱えているはずです。

于 2011-09-26T15:21:21.187 に答える
1

作業が終わったらすぐにデータベースを閉じることをお勧めします。トランザクションを実行する必要があるたびにデータベースを開いたり閉じたりすることも悪い考えではありません。アプリケーションが常にデータを書き込んでいない限り、パフォーマンスが低下することはありません

于 2011-09-26T14:19:03.357 に答える