我已经构建了一个Android应用程序,我在其中调用方法insertSampleData()
来自主要活动的onCreate()
方法。
问题是每次启动应用时都会调用onCreate()
方法,
这导致我的数据库填充了大量的样本数据。
我想在安装应用程序时只提供一次示例数据。谁能告诉我怎么做?非常感谢!
P.S:方法insertSampleData()
用于将样本数据插入到Sq-lite数据库中。
答案 0 :(得分:6)
执行此操作的两种方法:
答案 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
方法。
- 关于onCreate()和onUpgrade()
醇> 只要新安装了应用程序,就会调用onCreate(..)。 只要应用程序升级并启动,就会调用onUpgrade 数据库版本不一样。
如此处所写:https://stackoverflow.com/a/8133640/5349594
我想补充一点,如果你使用的是某个orm库,大多数都支持类似的东西。
答案 4 :(得分:1)
正如Hrundi在评论中所说,您可以使用if
语句,但可能更好的选择是使用自定义DatabaseHelper
类wihic extends SQLiteOpenHelper。
在SQLiteOpenHelper
内,你有onCreate
方法,这是第一次创建数据库时调用的方法。这是表的创建和表的初始填充的地方。
你可以谷歌这个,你会发现很多例子。