4

こんにちは皆さん、私はAndroidを初めて使用し、データベースを管理するために緑のDAOを使用していますが、アプリケーションonTeriminate()でそれを行っているため、データベースが閉じていない例外を頻繁に取得しています。アプリケーション全体でデータベースの単一接続のみを維持していますが、場合によっては私のアプリケーションバックグラウンドに戻り、データベース接続オブジェクトがnullになっていることを再開します。使用する前にオブジェクトのnullネスをチェックすることで問題を処理しましたが、今では例外が頻繁に発生します

android.database.sqlite.DatabaseObjectNotClosedException: アプリケーションは、ここで開かれたカーソルまたはデータベース オブジェクトを閉じませんでした

これを処理する方法を教えてください

前もって感謝します

lang.IllegalStateException: データベース ロックがありません。01-03 09:39:18.688: E/システム (3063): android.database.sqlite.SQLiteDatabase.verifyLockOwner (SQLiteDatabase.java:2090) 01-03 09:39:18.688: E/システム (3063): でandroid.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2182) 01-03 09:39:18.688: E/System(3063): android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2178) ) 01-03 09:39:18.688: E/System(3063): android.util.LruCache.trimToSize(LruCache.java:197) で 01-03 09:39:18.688: E/System(3063): Android で.util.LruCache.evictAll(LruCache.java:285) 01-03 09:39:18.688: E/System(3063): android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2143) 01-03 09 :39:18.688: E/System(3063): android.database.sqlite.SQLiteDatabase.

接続を閉じるためのコード:

@Override
public void onTerminate() {
    // TODO Auto-generated method stub
    super.onTerminate();
    snail_mail_db.close();
      snail_mail_database_helper_obj.close();

}
4

2 に答える 2

0

Application クラスを (theApp として) 拡張し、そこでデータベース接続を開いたり閉じたりします。その後、すべてのアクティビティはtheApp.getInstance().daoSession()、アクティビティが一時停止または終了したときに DB を閉じることなく、DB を介してアクセスできます。最後のアクティビティが終了すると、Android は theApp を終了し、DB 接続を閉じます。

于 2012-12-22T20:18:25.367 に答える
0

接続を開くときに、操作が完了したらそのカーソルを閉じる必要があるため、「アプリケーションはここで開かれたカーソルまたはデータベースオブジェクトを閉じませんでした」という例外が発生しています。db.close(); を使用します。操作の完了後。

于 2012-12-19T07:04:36.497 に答える