7

我的应用程序中有一个中央数据库,需要访问几个不同的活动。

我应该通过将其设为静态来共享此对象吗?例如在初始化数据库的活动中,我这样做:

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 中的 Singleton。

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 回答