我想在我的应用程序中只运行一段代码,并且是第一次运行它时(新安装的应用程序)。我怎么能这样做,任何人都可以解释给出一段代码。
实际上,在我的android项目中,我想创建数据库并在第一次运行时插入一些值。之后,该特定代码不应该再次运行。如何通过 SharedPreferences 或偏好设置来实现此机制。
示例代码会更有帮助。
答案 0 :(得分:38)
首先你可以使用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();
}
}
不要忘记放置activity declaration in manifest,以及intentfilters(action = MAIN
,category = 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 ran.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
所有你需要的工作,都放在AndroidManifest.xml属性中的application
标签android:name =“。App”。
<!-- other xml stuff -->
<application ... android:name=".App">
<!-- yet another stuff like nextline -->
<activity ... />
</application>
答案 1 :(得分:14)
你可以尝试:
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();
}
在创建的第一个活动中写下此内容。然后代码将不再执行。
答案 2 :(得分:4)
您需要在应用中运行此代码的任何地方:
firstTime
是否为True 如果不是
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();
}
答案 3 :(得分:4)
这是我在这些情况下所做的事情:
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
}
希望这会有所帮助