在Android中为Sample数据放置代码的位置?

时间:2016-01-14 13:27:43

标签: android sqlite android-sqlite

我已经构建了一个Android应用程序,我在其中调用方法insertSampleData() 来自主要活动的onCreate()方法。

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

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

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

5 个答案:

答案 0 :(得分:6)

执行此操作的两种方法:

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

答案 1 :(得分:4)

您可以在Application课程中创建一个与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();
}

答案 2 :(得分:2)

insertSampleData()方法之前插入数据时,请检查yout表中的行数。
如果 0 ,请执行INSERT s 不需要else语句:继续退出。

注意:如果没有找到,样本数据将在下次运行时重新插入 因为在insertSampleData()中调用了onCreate() 如果没有找到数据,插入样本数据 因此,该表在启动时永远不会为空。

答案 3 :(得分:2)

虽然其他答案都是正确的,但有一种内置的方法可以实现您的目标:onCreate的{​​{1}}和onUpgrade方法。

  
      
  1. 关于onCreate()和onUpgrade()
  2.         只要新安装了应用程序,就会调用onCreate(..)。   只要应用程序升级并启动,就会调用onUpgrade   数据库版本不一样。

如此处所写:https://stackoverflow.com/a/8133640/5349594

我想补充一点,如果你使用的是某个orm库,大多数都支持类似的东西。

答案 4 :(得分:1)

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

SQLiteOpenHelper内,你有onCreate方法,这是第一次创建数据库时调用的方法。这是表的创建和表的初始填充的地方。

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