【问题标题】:Start a specific part of an application only one time after installation安装后仅启动一次应用程序的特定部分
【发布时间】:2011-11-25 20:24:20
【问题描述】:

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

祝你有美好的一天

野生动物园

备注

我有一个想法来实现这一点。我在我的 SplashScreen 中创建了一个布尔值,如果没有任何内容,它会查看数据库表,它输入所有条目并在表中做一个标记,它的填充就像是。 之后,如果我再次打开该应用程序,它会查看数据库,如果有,或者我定义了什么,它不会再次将所有条目放入我的数据库中。 对不起,我的想法是什么蹩脚的定义,我的英语不是最好的。

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

【问题讨论】:

  • 在将数据添加到数据库之前检索游标中的记录并检查记录是否存在,否则只添加记录。
  • 这意味着这个数据库操作只有一次有意义。所有其他应用程序在第一个应用程序启动后开始进行无用的数据库操作......最佳实践?!

标签: android database main


【解决方案1】:

为什么没有启动活动来检查应用程序是否是第一次启动(并将值存储在应用程序首选项中)并转发到数据库设置活动或主活动......

以下是有关如何读取和写入首选项的示例:

定义偏好键:

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 同意...只需使用应用偏好标记填充数据库的操作即可。
  • 如何查看应用是否首次启动?
  • @fabricci:如何实际展示一个如何将布尔值写入共享首选项以及如何检查应用程序是否第一次执行的示例?
【解决方案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);

【讨论】:

    【解决方案3】:
    // 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();
    

    【讨论】:

      【解决方案4】:

      不是最佳解决方案,但您可以检查其中一个条目,如果它们不存在,请将它们添加到您的数据库中,否则忽略它们。

      【讨论】:

        【解决方案5】:

        试试这个....

        在共享首选项中有一个布尔值。

        在应用程序每次启动时检查是否设置了变量。

        如果没有设置,则设置它并执行db操作。

        如果设置不进行数据库操作,则继续下一步。

        【讨论】:

          【解决方案6】:

          我有一个想法,正在阅读其他答案。 使用数据库的版本写入 sharedpreference,因此下次您需要更新数据库时,只需删除旧数据库并用您的数据重新填充新数据库。

          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
          

          【讨论】:

            【解决方案7】:

            您可以在数据库助手中使用方法 onCreate - 它仅在创建新数据库时使用,所以我认为这就是您要寻找的。​​p>

            【讨论】:

              猜你喜欢
              • 2017-05-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多