web-dev-qa-db-fra.com

Exécuter un morceau de code une seule fois lorsqu'une application est installée

Je veux exécuter un morceau de code une seule fois dans mon application et c'est lorsque je l'exécute pour la première fois (application nouvellement installée). Comment pourrais-je faire cela, quelqu'un peut-il expliquer en donnant un morceau de code.

En fait, dans mon projet Android Android, je veux créer une base de données et insérer des valeurs uniquement lors de la première exécution. Après cela, ce morceau de code particulier ne devrait plus fonctionner. Comment puis-je réaliser ce mécanisme via SharedPreferences ou Préférences.

Un exemple de code sera plus utile.

27
Chintan Soni

Avant tout, vous pouvez utiliser SQLiteOpenHelper . C'est la façon préférée de faire les choses avec la base de données. Cette classe possède une méthode onCreate(SQLiteDatabase), qui a été appelée lors de la première création de la base de données. Je pense que ça te va bien.

Si vous souhaitez plus de flexibilité et que votre première logique n'est pas uniquement liée à la base de données, vous pouvez utiliser l'exemple fourni précédemment. Vous avez juste besoin de le mettre au démarrage.

Il y a 2 spots de démarrage. Si vous n'avez qu'une seule activité, vous pouvez mettre votre code dans la méthode onCreate, donc ce sera comme ceci:

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

N'oubliez pas de mettre déclaration d'activité dans le manifeste , ainsi que intentionfilters (action = MAIN, category = LAUNCHER).

Si vous avez plus d'une activité et que vous ne voulez pas dupliquer votre logique de démarrage, vous pouvez simplement mettre votre logique d'initialisation dans l'instance d'application, qui est créée avant toutes les activités (et d'autres composants, tels que les services, les récepteurs de diffusion, les fournisseurs de contenu) .

Créez simplement une classe comme ça:

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

Tout ce dont vous avez besoin pour que cela fonctionne, est placé dans la balise application dans l'attribut AndroidManifest.xml Android: name = ". App".

<!-- other xml stuff -->

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

   <!-- yet another stuff like nextline -->
   <activity ... />
</application>
38
pepyakin

Tu pourrais essayer :

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

Écrivez ceci dans votre première activité sur créer. Ensuite, le code ne s'exécutera plus.

14
Sanober Malik

voici ce que je fais dans ces situations:

    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 
    }

j'espère que cela t'aides

4
Driss Bounouar

Partout où vous devez exécuter ce code dans votre application:

  1. Vérifiez si booléen firstTime est vrai dans les préférences partagées
  2. Si non

    • Exécutez le code unique
    • Enregistrer firstTime comme vrai dans les préférences partagées

Quelque chose comme ça:

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