2013-02-25 66 views
21

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

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

示例代码会更有帮助。

回答

33

都可以使用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 runned. 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean("firstTime", true); 
    editor.commit(); 
    } 
} 

不要忘了把activity declaration in manifest,以及它的intentfilters(行动= MAIN,类别= LAUNCHER)。

如果您有多个活动并且您不想复制启动逻辑,则可以将您的初始化逻辑放在Application实例中,该实例在所有活动(以及其他组件,如服务,广播接收者,内容提供商)。

只要创建类这样的:

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 runned. 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putBoolean("firstTime", true); 
     editor.commit(); 
    } 
} 

所有你需要这个工作,放在application标签在AndroidManifest.xml属性机器人:名字=“应用程序”。

<!-- other xml stuff --> 

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

    <!-- yet another stuff like nextline --> 
    <activity ... /> 
</application> 
+0

非常感谢你,你的代码让我从世界中拯救了我。 – 2017-05-10 09:53:28

9

你可以尝试:

SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this); 
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true); 
if (isFirstRun) 
{ 
    // Code to run once 
    SharedPreferences.Editor editor = wmbPreference.edit(); 
    editor.putBoolean("FIRSTRUN", false); 
    editor.commit(); 
} 

写在你的第一个活动上创建。然后代码将不会再执行。

+0

即地方; – pollaris 2017-09-27 15:10:37

3

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

  1. 检查布尔firstTime是在共享偏好
  2. 如果没有

    • 运行的一个时间码
    • 真将firstTime另存为共享偏好

事情是这样的:

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(); 
} 
2

这里是我做的这些情况:

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 
    } 

希望这有助于super.onCreate(savedInstanceState)后

相关问题