在我的应用程序上,我有一个数据库,我必须填写一些条目。我已经在我的闪屏中打包了这一步。现在我每次打开应用程序时都会遇到问题,它会将所有条目再次放入我的数据库。 我正在寻找一种方法,只有在第一次应用程序获得打开时才会发生这种情况。但我不知道,我怎么能意识到这一点。 我很满意每一个输入和想法!
度过愉快的一天
狩猎
备注
我有一个想法意识到这一点。我在我的SplashScreen中创建了一个布尔值,如果没有,则查看数据库表,它输入所有条目并在表中标记,其填充为yes。 之后,如果我再次打开应用程序,它会查看数据库,如果它是肯定的或我所定义的,它不会再次放入我的数据库中的所有条目。 对于我的想法的蹩脚定义感到抱歉,我的英语不是最好的。
我正在寻找比这更简单的方法。
答案 0 :(得分:3)
为什么没有启动活动来检查应用程序是否第一次启动(并将值存储在应用程序首选项中)并转发到数据库设置活动或主活动....
以下是有关如何读取和写入首选项的示例:
定义偏好键:
public static final String KEY_APP_IS_INITIALIZED = "APP_INITIALIZED";
从首选项中读取布尔值:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context)
boolean appIsInitialized = prefs.getBoolean(KEY_APP_IS_INITIALIZED, false);
将布尔值存储到首选项:
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);
答案 1 :(得分:2)
您可以使用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);
答案 2 :(得分:2)
// 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();
答案 3 :(得分:0)
不是最佳解决方案,但您可以检查其中一个条目,如果它们不存在,请将它们添加到您的数据库中,否则忽略它们。
答案 4 :(得分:0)
试试这个......
在共享偏好设置中有一个bool值。
检查应用程序每次启动时是否设置了变量。
如果未设置则设置它并执行数据库操作。
如果设置不执行db操作,请转到后续步骤。
答案 5 :(得分:0)
我有一个想法,阅读其他答案。 使用数据库版本在共享首选项中写入,因此下次需要更新数据库时,只需删除旧数据库,然后用新数据重新填充数据库。
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.
}
}
我现在正在尝试,尚未经过测试。 在启动活动的onCreate中使用:
populateResDB(1); //1 is for the first time, increase it manually
答案 6 :(得分:0)
您可以在数据库帮助程序中使用onCreate方法 - 仅在创建新数据库时使用它,所以我认为这就是您要查找的内容。