我有一个班级:
public class DbAdapter {
private DbHelper dbHelper;
private SQLiteDatabase db;
private final Context context;
...
}
我想让它在所有活动中都可用。该类提供对我的sqlite数据库的访问。
最优雅,最简洁的方法是什么?我想在每个活动中创建对象(它应该“连接”我到同一个数据库,对吧?)。
答案 0 :(得分:2)
您可以实现扩展Application类。谷歌有这样的说法:
需要的人的基础课程 维护全球申请状态。您 可以提供您自己的实现 在你的中指定它的名字 AndroidManifest.xml中的 标记,这将导致该类 在进程时为您实例化 对于您的应用程序/包是 创建
通常不需要子类 应用。在大多数情况下,静态 单身人士可以提供相同的 功能更加模块化。 如果你的单身人士需要全球化 上下文(例如注册 广播接收机),功能 检索它可以给出一个Context 内部使用 Context.getApplicationContext()的时候 首先构建单身人士。
我自己就是这样做的:
public class App extends Application {
private DbHelper dbHelper;
@Override
public void onCreate() {
super.onCreate();
dbHelper = new DbHelper(this);
}
public SQLiteDatabase getDatabase(){
return dbHelper.getWritableDatabase();
}
@Override
public void onTerminate() {
super.onTerminate();
dbHelper.close();
}
}
然后你只需要调用getApplicationContext.getDatabase()
来访问它答案 1 :(得分:0)
您可以查看Singleton Pattern,它可以让一个类只创建一个对象,并使该对象可以从任何地方访问。希望这会有所帮助。
答案 2 :(得分:0)
我认为实现此目的的最佳方法是使用Service。 Service将继续引用DbAdapter,您的所有活动都将连接到Service。当活动连接到服务时,它将保留对它的引用,并且每次需要数据库访问时,它将用于获取DbAdapter。使用此方法,您可以控制数据库连接。如果没有任何活动连接到服务,那么没有人使用数据库连接,你可以释放它。
答案 3 :(得分:0)
看看ContentProviders。它们用于访问数据。无论在链接中是否强调“在应用程序之间共享数据”,它们都不必公开 - 您可以将它们用作访问应用程序中数据的集中方式。
这篇关于“Writing Your Own ContentProvider”的博客文章显示了一些用于设置在一个应用程序中运行的ContentProvider的代码。