29

我只想在我的应用程序中运行一段代码,并且是在我第一次运行它时(新安装的应用程序)。我怎么能这样做,任何人都可以解释给出一段代码。

实际上,在我的 android 项目中,我只想在第一次运行时创建数据库并插入一些值。之后,该特定代码不应再次运行。我如何通过SharedPreferencesPreferences实现这种机制。

示例代码会更有帮助。

4

4 回答 4

45

首先你可以使用SQLiteOpenHelper。它是使用数据库做事的首选方式。这个类有一个onCreate(SQLiteDatabase)方法,在第一次创建数据库时调用。我觉得很适合你。

如果您想要更大的灵活性并且您的第一次逻辑不仅仅与数据库绑定,您可以使用之前提供的示例。你只需要把它放在启动点。

有2个启动点。如果你只有一个活动,你可以把你的代码放在onCreate方法中,所以它会是这样的:

public void onCreate(Bundle savedInstanceState) {
  // don't forget to call super method.
  super.onCreate(savedInstanceState);

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
  if (!prefs.getBoolean("firstTime", false)) {
    // <---- run your one time code here
    databaseSetup();

    // mark first time has ran.
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
  }
}

不要忘记将活动声明以及它的意图过滤器(action = MAIN, category = LAUNCHER)放在 manifest 中。

如果您有多个活动并且不想重复启动逻辑,则可以将初始化逻辑放在应用程序实例中,该实例在所有活动(以及其他组件,例如服务、广播接收器、内容提供者)之前创建.

只需创建这样的类:

public class App extends Application {

  @Override
  public void onCreate() {
    super.onCreate();

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    if (!prefs.getBoolean("firstTime", false)) {
      // <---- run your one time code here
      databaseSetup();

      // mark first time has ran.
      SharedPreferences.Editor editor = prefs.edit();
      editor.putBoolean("firstTime", true);
      editor.commit();
    }
}

为此,您只需将其放入applicationAndroidManifest.xml 属性 android:name=".App" 的标记中。

<!-- other xml stuff -->

<application ... android:name=".App">

   <!-- yet another stuff like nextline -->
   <activity ... />
</application>
于 2013-02-25T07:31:41.363 回答
15

你可以试试:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
    boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
    SharedPreferences.Editor editor = wmbPreference.edit();

    if (isFirstRun){
       // Code to run once
       editor.putBoolean("FIRSTRUN", false);
       editor.apply();
}

在你的第一个创建活动中写下这个。那么之后的代码就不会再执行了。

于 2013-02-25T07:04:00.493 回答
7

这就是我在这些情况下所做的:

    wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);


    isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);

    if (isFirstRun)
    {

        // Do your magic here

        SharedPreferences.Editor editor = wmbPreference.edit();
        editor.putBoolean("FIRSTRUN", false);
        editor.commit();
    }else{
        //what you do everytime goes here 
    }

希望这可以帮助

于 2013-02-26T14:23:00.747 回答
6

无论您需要在应用程序中的何处运行此代码:

  1. firstTime检查共享首选项中的布尔值是否为 True
  2. 如果不

    • 运行一次性代码
    • 在共享首选项中另存firstTime为 true

像这样的东西:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("firstTime", false)) {
    // run your one time code here
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime", true);
    editor.commit();
}
于 2013-02-25T07:04:49.430 回答