7

アプリケーションに中央データベースがあり、いくつかの異なるアクティビティにアクセスする必要があります。

このオブジェクトを静的にして共有する必要がありますか?たとえば、DBを初期化するアクティビティのように、次のようにします。

protected static appDatabase db;

その後、他の人がを介してそれにアクセスできますFirstActivity.db

別のオプションはprivate appDatabase db、それを必要とするすべてのアクティビティでオブジェクトを作成することですが、同じ保存データにアクセスするために複数のデータベースオブジェクトを開くのは無駄かもしれません。

しかし、私はJavaについてあまり知りません。それが、私が尋ねている理由です。これを行うための好ましい方法は何ですか。また、その理由は何ですか。

ありがとう

4

2 に答える 2

4

このようにシングルトンを使用できます。

    private static DataHelper singleton;

    public static DataHelper getDataHelper(Context context) {
            if (singleton == null) {
                    singleton = new DataHelper(context);
                    OpenHelper openHelper = new OpenHelper(singleton.context);
                    singleton.db = openHelper.getWritableDatabase();
            }
            if(!singleton.db.isOpen()){
                    OpenHelper openHelper = new OpenHelper(singleton.context);
                    singleton.db = openHelper.getWritableDatabase();
            }
            singleton.context = context;
            return singleton;
    }

    private DataHelper(Context context) {
        this.context = context;
}

そして、このようにシングルトンクラスを呼び出します。

public DataHelper dh;
this.dh = DataHelper.getDataHelper(this);
于 2013-01-06T20:28:51.567 に答える
1

Application クラスと同期データベース オブジェクト管理を使用して、この状況に対処します。ここに例があります。[synchronized] 修飾子は、マルチスレッド アプリで重要です。

定義上、Application オブジェクトは Android のシングルトンです。

public class App extends Application
{

private static App _instance;
private AppLocalStorage _localStorage;

@Override
public void onCreate()
{
    super.onCreate();

    _instance = this;
}


public static App getInstance()
{
        //Exposes a mechanism to get an instance of the 
        //custom application object.
        return _instance;
}

public synchronized AppLocalStorage getDatabase()
{
    if (_localStorage == null)
    {
        _localStorage = new AppLocalStorage(this);
    }

    return _localStorage;
}

}

于 2013-01-06T21:18:34.253 に答える