下面是一些示例代码,用于说明三种可能的方法。这些将允许在整个应用程序中访问数据库。
方法#1:让'SQLiteOpenHelper'成为静态数据成员
这不是完整的实现,但它应该给你一个关于如何正确设计类的好主意。静态工厂方法确保在任何时候都只存在一个数据库帮助程序实例。DatabaseHelper
/**
* create custom DatabaseHelper class that extends SQLiteOpenHelper
*/
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper mInstance = null;
private static final String DATABASE_NAME = "databaseName";
private static final String DATABASE_TABLE = "tableName";
private static final int DATABASE_VERSION = 1;
private Context mCxt;
public static DatabaseHelper getInstance(Context ctx) {
/**
* use the application context as suggested by CommonsWare.
* this will ensure that you dont accidentally leak an Activitys
* context (see this article for more information:
* http://android-developers.blogspot.nl/2009/01/avoiding-memory-leaks.html)
*/
if (mInstance == null) {
mInstance = new DatabaseHelper(ctx.getApplicationContext());
}
return mInstance;
}
/**
* constructor should be private to prevent direct instantiation.
* make call to static factory method "getInstance()" instead.
*/
private DatabaseHelper(Context ctx) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.mCtx = ctx;
}
}
方法#2:使用“内容提供者”抽象SQLite数据库
这就是我建议的方法。首先,新类需要 s,因此,如果您希望活动或片段使用 a 实现(我建议您利用它,这很神奇!),则需要为您的应用程序实现 a。此外,您不必担心使用 ContentProviders 创建 Singleton 数据库帮助程序。只需从 Activity 调用,系统就会为您处理所有事情(换句话说,无需设计 Singleton 模式来防止创建多个实例)。CursorLoader
ContentProvider
LoaderManager.LoaderCallbacks<Cursor>
CursorLoader
ContentProvider
getContentResolver()
希望这有帮助!