在我的应用程序上,我有一个数据库,我必须填写一些条目一次。我已经在我的溅屏中打包了这一步。现在我得到的问题,每次我打开我的应用程序,它再次把所有条目到我的数据库。我正在寻找一种方法,让这种情况只发生在真正的第一次应用程序打开。但我不知道,我怎么能意识到这一点。我对每一个输入和想法都很满意!
祝你过得愉快
safari 指出我有一个想法来实现这一点。我在SplashScreen中创建了一个布尔值,它会查看数据库表,如果没有,它会输入所有条目,并在表中做一个标记,表示它填充为yes。之后,如果我再次打开应用程序,它会查看数据库,如果有一个是或我定义的任何东西,它不会再次把所有条目放在我的数据库中。很抱歉,我的想法是什么,我的英语不是最好的。
我正在寻找一种比这更简单的方法。
为什么不设置一个启动活动来检查应用程序是否首次启动(并将值存储在应用程序首选项中),然后转发到数据库设置活动或主活动....
下面是一个关于如何读写首选项的示例:
定义首选键:
public static final String KEY_APP_IS_INITIALIZED = "APP_INITIALIZED";
从preferences中读取布尔值:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context)
boolean appIsInitialized = prefs.getBoolean(KEY_APP_IS_INITIALIZED, false);
将布尔值存储到preferences:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context)
Editor editor = prefs.edit();
editor.putBoolean(KEY_APP_IS_INITIALIZED, true);
editor.commit();
启动活动:
Intent intent = new Intent(startup_activity,
db_initialized ?
MainActivity.class :
DbInitActivity.class);
startup_activity.startActivity(intent);
您可以使用SharedPreferences
来存储一个布尔值,该值指示数据库是否已经被填充。
您可以使用以下代码存储数据:
SharedPreferences pref = getPreferences(MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putBoolean(key, value); editor.commit();
然后当你启动应用程序时,你只需使用:
读取你的值SharedPreferences pref = getPreferences(MODE_PRIVATE);
pref.getBoolean(value, false);
// Check if DB is set up on start
SharedPreferences settings = getSharedPreferences("yourappidentifiername",MODE_PRIVATE);
String DbSetUp = settings.getString("dbsetup", "no");
// DbSetUp is "no" or "yes"
// Set that DB is set up
SharedPreferences settings = getSharedPreferences("yourappidentifiername",MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString("dbsetup", "yes");
editor.commit();
不是最优解决方案,但您可以检查其中一个条目,如果它们不存在,将它们添加到数据库中,否则忽略它们
试试这个....
在共享首选项中有一个bool值。
检查该变量是否在每次应用程序启动时设置。
如果没有设置,则设置并执行db操作。
我有一个想法,阅读其他的答案。使用一个版本的数据库写入共享首选项,所以下次需要更新数据库时,只需删除旧的数据库并将您的数据填充到新的数据库中。
public void populateResDB(int version){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int resDbVersion = prefs.getInt("ResDBVersion", 1);
if(resDbVersion<version){
//Populate database here
//Delete table/db
//Populate the table/database with new or updated data
//Update ResDBVersion for the next time
Editor editor = prefs.edit();
editor.putInt("ResDBVersion", version);
editor.commit();
}else{
//installed db has the same version as the one we want to install
//so, do nothing.
}
}
我正在尝试,还没有测试。在splash活动的onCreate中使用:
populateResDB(1); //1 is for the first time, increase it manually
你可以在你的数据库助手使用方法onCreate -它只使用,当新的数据库被创建,所以我认为这是你正在寻找