2013-02-25 64 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)後

相關問題