我有一个应用程序,它将一些数据存储在SQLite数据库中.此外,我在我的应用程序中进行了大量查询和重新查询.我在其中有大约15个活动.并且所有人都使用数据库来查询数据.
但我正在做的是在每个活动中打开我的数据库并在每个活动的onDestroy {…}中关闭它.
问题是onDestroy {…}可能永远不会被调用,有时我的应用程序会保持很长一段时间,并且我会从一个活动切换到另一个开放多次我的数据库.
有时我会得到像数据库这样的错误太多次打开而且从未关闭过.
在我从中获取数据并关闭它后,我会尝试完全关闭我的数据库…转到我的下一个活动并重新打开等等…..
但问题是,在某些活动中,我从其他活动中回来……关闭我的数据库并回到那个活动会产生一个很大的力量关闭.
我想做的是在我的应用程序开始时打开我的数据库并在结束时关闭它,但我面临两个问题:
1.
我应该让我的SQLiteOpenHelper类成为一个单独的吗?…获取它的一个实例…在我的第一个活动中打开它然后在我的下面的活动中获取我已经打开的数据库的实例/ ???
2.我的应用程序结束了????我怎么知道应用程序的结束位置以及关闭数据库的位置.
编辑:
public class DBAdapter extends SQLiteOpenHelper {
public DBAdapter(Context context) {
super(context, DATABASE_NAME, null, 1);
this.myContext = context;
}
public void openDataBase() throws SQLException {
String myPath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
}
这是我班上管理我的DB的一段代码.为了使这个单例,我应该使用一个构造函数:
private DBAdapter()
{
//nothing in here
}
但这对于SQLiteOpenHelper来说是未定义的
编辑决赛:
这就是我根据zirael的建议做到的:
package com.Server_1;
import android.app.Application;
public class MyApplication extends Application{
private static DBAdapter db;
public void onCreate()
{
db=new DBAdapter(getApplicationContext());
db.createDatabase();
db.openDataBase();
}
public static DBAdapter getDatabaseAdapter()
{
return db;
}
}
在我需要数据库连接的每个活动中,我都这样做:
MyApplication myApplication = (MyApplication) this.getApplication();
DBAdapter db= myApplication.getDatabaseAdapter();
最后我的清单看起来像:
android:label="@string/app_name"
android:name=".MyApplication"
android:debuggable="true">