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



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

祝你过得愉快

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 -它只使用,当新的数据库被创建,所以我认为这是你正在寻找

相关内容

  • 没有找到相关文章

最新更新