この記事では、さまざまなデータベース アプローチをうまく示しています。
私はアプローチ 2 を使用します: 私が作成した単一の LocalDatabaseAdapter を保持する Application オブジェクト。これは DatabaseOpenHelper などを保持します。
public class MyApplication extends Application {
private static LocalDbAdapter lDb;
public void onCreate() {
super.onCreate();
MyApplication.context = getApplicationContext();
lbm = LocalBroadcastManager.getInstance(context);
[..]
}
public static LocalDbAdapter getLDb(){
if(lDb==null){
lDb = new LocalDbAdapter(context);
}
if(lDb.isOpen()){
return lDb;
}else{
return lDb.open();
}
}
@Override
public void onTerminate() {
super.onTerminate();
lDb.close();
}
カメラアプリを起動してからメインアクティビティに戻ると、データベースが閉じられていないというエラーが発生します。指摘されているように、このデータベースはアプリケーションコンテキストで作成されたので、なぜアクティビティで閉じないことが問題なのか、それがアイデアだと思いました。データベース オブジェクトを 1 つだけ持つことの重要な利点は、書き込みを行う LocalDbAdapter のすべてのメソッドが挿入または更新の周りに protected(this) ステートメントを使用することです。
OnActivityResult では、カメラが写真を撮った後、次のようにデータベースを取得します
LocalDbAdapter ldb = MyApplication.getLDb();
これは私を真剣に悩ませました。MainActivity の onPause で閉じると、同じオブジェクトを使用するバックグラウンド サービスに問題が発生するのではないかと心配し、オブジェクトを onActivityResult に対してローカルに保持しています...