我正在寻找一种方法,从另一个非活动类和所有的教程,所以我发现到目前为止的问题,是反对的。
为什么?
方法openOrCreateDatabase
只能从服务或活动调用,或者我可以将其作为静态方法调用。
但是,此方法的第二个参数需要openOrCreateDatabase
,在大多数教程中是:SQLiteDatabase.openOrCreateDatabase
。我不能使用非活动类的CursorFactory
。有些人建议使用MODE_PRIVATE
,但我想避免这样的依赖性,即从我想使用db的每个活动传递MODE_PRIVATE
。
在所有活动中,在一个类中只有一个db连接和db处理的最佳方法是什么?
最佳答案
您是否可以通过singleton访问您的SQLiteDatabase
?
private static DatabaseHelper sInstance = null;
public static synchronized DatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
如果是这样,那么上面仍然需要一个
Context
参数,但是如果您不愿意传递一个参数,那么可以使用这个technique:public class App extends Application {
private static App instance;
public static App get() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
因此您可以使用
DatabaseHelper.getInstance(App.get());
访问数据库