0

この記事では、さまざまなデータベース アプローチをうまく示しています。

データベースのアプローチ

私はアプローチ 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 に対してローカルに保持しています...

4

0 に答える 0