Подтвердить что ты не робот

Запускать кусок кода только один раз, когда приложение установлено

Я хочу запустить часть кода только один раз в своем приложении и когда я запускаю его в первый раз (недавно установленное приложение). Как я могу это сделать, может кто-нибудь объяснить, чтобы дать часть кода.

Собственно, в моем проекте Android я хочу создать базу данных и вставить некоторые значения только в первый запуск. После этого этот фрагмент кода не должен запускаться снова. Как я могу достичь этого механизма с помощью SharedPreferences или Предпочтения.

Пример кода будет более полезным.

4b9b3361

Ответ 1

Прежде всего вы можете использовать SQLiteOpenHelper. Это предпочтительный способ делать вещи с базой данных. Этот класс имеет метод onCreate(SQLiteDatabase), вызываемый при первом создании базы данных. Я думаю, что это вам подходит.

Если вам нужна большая гибкость, и ваша первая логика времени не привязана только к базе данных, вы можете использовать образец, предоставленный ранее. Вам просто нужно поместить его в место запуска.

Есть два стартовых места. Если у вас только одно действие, вы можете поместить свой код в метод 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();
  }
}

Не забудьте поставить объявление активности в манифесте, а также aimfilters (action = MAIN, category = LAUNCHER).

Если у вас есть несколько действий, и вы не хотите дублировать свою логику запуска, вы можете просто поместить свою логику инициализации в экземпляр приложения, которая создается до всех действий (и других компонентов, таких как службы, широковещательные приемники, контент-провайдеров).

Просто создайте класс следующим образом:

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 атрибут android: name= ". App.

<!-- other xml stuff -->

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

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

Ответ 2

Вы можете попробовать:

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

Напишите это в своем первом действии при создании. Затем после того, как код не будет выполнен снова.

Ответ 3

Где бы вы ни запускали этот код в своем приложении:

  • Проверить, является ли логическое 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();
}

Ответ 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 
    }

надеюсь, что это поможет