在多个活动之间共享一个SQLite DB的最佳方法是什么?数据库中的表显示在ListView中,并且还要执行删除/插入记录。我听说过有关服务的事情,但没有找到任何关于我的问题的例子。现在我有SQLiteOpenHelper类来打开数据库。我在OnPause()中关闭数据库并在onResume()中打开它。但是我不能从子活动向DB插入数据,出了点问题。
答案 0 :(得分:20)
为您的应用创建一个Application类。只要您的应用程序的任何部分正在运行,这将在内存中保持活动状态。您可以从onCreate方法创建数据库并在onTerminate方法中清理它。 (注意,不能保证会调用onTerminate,所以你应该注意你在这里所依赖的东西。但是,由于SQLite数据库只是一个文件,并且被激活地刷新,所以关闭操作不仅仅是一种礼貌。必要性。)
您可以通过“getApplication”从任何活动访问该应用程序,因此您始终可以使用该数据库。
有关详细信息,请参阅http://developer.android.com/guide/appendix/faq/framework.html#3。
更新
根据要求,这是使用getApplication的示例。这非常简单。
SQLiteDatabase mDB;
@Override protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDB = ((MyApplication)getApplication()).mDB;
}
如果每个活动都包含此代码,那么每个活动都将拥有自己的mDB字段,该字段引用相同的底层共享数据库对象。
答案 1 :(得分:3)
您可以执行此实现BaseActivity类,该类由应用程序中的所有Activity类扩展:
public class BaseActivity extends Activity {
protected static SQLiteOpenHelper database;
@Override
protected void onPause() {
// TODO close database
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
// TODO open database
}
}
public class OneSubActitivy extends BaseActivity {
// methods using database from BaseActivity
}