活动之间共享的Android SQLite数据库

在几个活动之间共享一个SQLite数据库的最佳方式是什么? 在ListView中显示来自DB的表格,并且还将执行删除/插入logging。 我听说服务,但没有find我的问题的例子。 现在我有用于打开数据库的SQLiteOpenHelper类。 我在OnPause()中closuresdb,并在onResume()中打开它。 但是我不能从子活动中将数据插入到数据库中,因此出错。

Solutions Collecting From Web of "活动之间共享的Android SQLite数据库"

为您的应用程序创build一个Application类。 只要应用程序的任何部分正在运行,这将在内存中保持活动状态。 您可以从onCreate方法创build数据库,并在onTerminate方法中进行清理。 (请注意,不能保证onTerminate将会被调用,所以你应该小心你依赖于这里的东西,但是,由于SQLite数据库只是一个文件,而且被攻击性地刷新,所以closures操作不只是一个礼貌必要性。)

您可以通过“getApplication”从任何Activity访问应用程序,因此数据库将始终可供您使用。

有关更多信息,请参阅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字段,它引用相同的底层共享DB对象。

你可以这样做,实现一个由应用程序中的所有Activity类扩展的BaseActivity类:

 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 }