Android / Java:从多个活动访问相同的SQLite DB对象

时间:2013-01-06 19:37:41

标签: java android database class

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

我应该通过使其静态来共享此对象吗?例如,在初始化DB的活动中,我这样做:

protected static appDatabase db;

然后其他人可以通过FirstActivity.db访问它。

另一种选择是在每个需要它的活动中创建private appDatabase db个对象,但我怀疑打开多个数据库对象来访问相同的存储数据可能会浪费。

但是我不太了解java,这就是我要问的原因 - 这样做的首选方法是什么,为什么?

由于

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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;
}

}