Android 中示例数据的代码放在哪里?

Where to put code for Sample data in Android?

我构建了一个 android 应用程序,我在其中调用方法 insertSampleData() 来自 main activity.

onCreate() 方法

问题是每次启动应用程序时都会调用 onCreate() 方法, 这导致用大量示例数据填充我的数据库。

我只想在安装应用程序时提供一次示例数据。谁能告诉我该怎么做?非常感谢!

P.S:方法insertSampleData()用于将样本数据插入Sq-lite数据库

在您的 insertSampleData() 方法中, 插入数据之前,检查您 table.
中的行数 如果是0,执行INSERTs.
不需要 else 语句:继续退出。

注意:样本数据将在下一个运行re-inserted,如果找不到。
因为在onCreate().
中调用了insertSampleData() 如果没有找到数据,它插入示例数据。
因此,table 在开始时永远不会为空。

2 种方法:

  • 如果数据被插入一次(例如到 SharedPreferences)则保存
  • 或者在添加之前检查你的数据库中是否已经有任何样本数据(但如果用户可以删除数据可能会导致问题)

您可以在您的 Application class 中创建一个类似于此的 onCreate() 支票:

SharedPreferences preferences = getSharedPreferences("prefs", Context.MODE_PRIVATE);
boolean firstRun = preferences.getBoolean("firstRun", false);
if(firstRun) {
    insertSampleData();
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("firstRun", true);
    editor.commit();
}

虽然其他答案是正确的,但有一种 built-in 方法可以实现您想要的:onCreateonUpgrade 方法 SqliteOpenHelper

  1. About onCreate() and onUpgrade()

onCreate(..) is called whenever the app is freshly installed. onUpgrade is called whenever the app is upgraded and launched and the database version is not the same.

如这里所写:

我要补充一点,如果您正在使用一些 orm 库,它们中的大多数都支持与此类似的东西。

正如 Hrundi 在评论中所说,您可以使用 if 语句,但可能更好的选择是使用自定义 DatabaseHelper class wihic extends SQLiteOpenHelper

SQLiteOpenHelper 中,您有 onCreate 方法,该方法在首次创建数据库时调用。这是表的创建和表的初始填充应该发生的地方。

你可以google这个,你会发现很多例子。