安装后仅启动一次应用程序的特定部分

时间:2011-09-27 08:40:44

标签: android database main

在我的应用程序上,我有一个数据库,我必须填写一些条目。我已经在我的闪屏中打包了这一步。现在我每次打开应用程序时都会遇到问题,它会将所有条目再次放入我的数据库。 我正在寻找一种方法,只有在第一次应用程序获得打开时才会发生这种情况。但我不知道,我怎么能意识到这一点。 我很满意每一个输入和想法!

度过愉快的一天

狩猎

备注

我有一个想法意识到这一点。我在我的SplashScreen中创建了一个布尔值,如果没有,则查看数据库表,它输入所有条目并在表中标记,其填充为yes。 之后,如果我再次打开应用程序,它会查看数据库,如果它是肯定的或我所定义的,它不会再次放入我的数据库中的所有条目。 对于我的想法的蹩脚定义感到抱歉,我的英语不是最好的。

我正在寻找比这更简单的方法。

7 个答案:

答案 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方法 - 仅在创建新数据库时使用它,所以我认为这就是您要查找的内容。