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.
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>
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.
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
Partout où vous devez exécuter ce code dans votre application:
firstTime
est vrai dans les préférences partagéesSi non
firstTime
comme vrai dans les préférences partagéesQuelque 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();
}