2013-02-25 4 views
21

Ich möchte ein Stück Code nur einmal in meiner Anwendung ausführen und ist, wenn ich es zum ersten Mal ausführen (neu installierte App). Wie könnte ich das tun, kann jemand erklären, ein Stück Code zu geben.Führen Sie ein Stück Code nur einmal, wenn eine Anwendung installiert ist

Eigentlich möchte ich in meinem Android-Projekt Datenbank erstellen und einige Werte nur beim ersten Lauf einfügen. Danach sollte dieser bestimmte Code nicht mehr ausgeführt werden. Wie kann ich diesen Mechanismus durch SharedPreferences oder Präferenzen erreichen.

Beispielcode wird hilfreicher sein.

Antwort

33

Bevor alles, was Sie SQLiteOpenHelper verwenden können. Es ist der bevorzugte Weg, um Dinge mit der Datenbank zu tun. Diese Klasse verfügt über eine onCreate(SQLiteDatabase)-Methode, die beim ersten Erstellen der Datenbank aufgerufen wird. Ich denke, es steht dir gut.

Wenn Sie mehr Flexibilität wünschen und Ihre erste Logik nicht nur mit der Datenbank verknüpft ist, können Sie das zuvor bereitgestellte Beispiel verwenden. Sie müssen es nur in den Startpunkt stellen.

Es gibt 2 Anlaufstellen. Wenn Sie nur einzelne Aktivität haben, können Sie Ihren Code in onCreate Methode setzen, so wird es so sein:

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

Vergessen Sie nicht activity declaration in manifest zu setzen, sowie es intentfilters ist (action = MAIN, category = LAUNCHER).

Wenn Sie mehr als eine Aktivität haben und Ihre Startlogik nicht duplizieren möchten, können Sie Ihre Initialisierungslogik einfach in die Anwendungsinstanz einfügen, die vor allen Aktivitäten (und anderen Komponenten wie Diensten, Sendeempfängern) erstellt wird , Anbieter von Inhalten).

Erstellen Sie einfach Klasse wie folgt aus:

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

Alles was Sie brauchen für diese zu arbeiten, in application Tag in AndroidManifest.xml gesetzt wird Attribut android: name = "App.".

<!-- other xml stuff --> 

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

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

Vielen Dank, dein Code rette mich von der Welt. –

9

Sie könnten versuchen:

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

schreiben diese in Ihrer ersten Aktivität auf erstellen. Dann wird der Code nicht mehr ausgeführt.

+0

das heißt Platz nach super.onCreate (savedInstanceState); – pollaris

3

Wo auch immer Sie brauchen diesen Code in Ihrer Anwendung auszuführen:

  1. Überprüfen Sie, ob boolean firstTime Wahr in gemeinsamen Vorlieben ist
  2. Wenn nicht

    • Führen Sie das ein Zeitcode
    • Speichern firstTime als wahr in gemeinsamen Einstellungen

Etwas wie folgt aus:

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

hier ist, was ich in solchen Situationen tun:

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 
    } 

hoffe, das hilft

Verwandte Themen