Сохранение данных переменной до тех пор, пока пользователь не закроет приложение?

#android #kotlin

#Android #kotlin

Вопрос:

Я думаю, как лучше всего сохранить age пользователя из 2 переменных даты рождения: YEAR и DAY_OF_YEAR . Поскольку age это динамическая переменная, я хочу, чтобы создание age переменной вызывалось только один раз, поскольку я не хочу вызывать функцию каждый раз, когда я хочу обратиться к age в одном и том же сеансе пользователя.

Затем, когда пользователь закрывает приложение и снова открывается, я хочу, чтобы его age инициализировали снова, если они age изменились.

Итак, как я могу сохранить age для сеанса пользователя, а затем инициализировать его снова, как только приложение снова откроется?

Комментарии:

1. Сохраните значение в общих настройках, а когда ваше приложение откроется, проверьте, совпадает ли возраст с тем, что указан в общих настройках, и продолжите или перепишите настройки, если возраст изменился.

Ответ №1:

Использовать «статическую» переменную

 private static int myValue;

public static int getMyValue() {
    return myValue;
}

public static void setMyValue(int myValue) {
    MyActivity.myValue = myValue;
}
  

Статические значения будут храниться только до тех пор, пока приложение открыто

каждый раз, когда вам нужно установить новое значение, вы вызываете setMyValue()

Ответ №2:

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

Предположим, что название вашего метода вычисления возраста — calculateAge(),

 public class App extends Application {
  @Override
    public void onCreate() {
        super.onCreate();
        int age = calculateAge();
        if (a != getAge()) {
           saveAge(this, a); 
       }
    }

    int calculateAge() {
      return age;
    }

        public static void saveAge(Context context, String lang,  int age) {
        SharedPreferences sharedPref = context.getSharedPreferences(quesID, Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putInt("age", age);
        editor.apply();
    }


    public static int getAge(Context context) {
        SharedPreferences sharedPref = 
     context.getSharedPreferences(context.getString(R.string.filename), 
         Context.MODE_PRIVATE);
        return sharedPref.getInt("age", 0);
    }
}
  

а чтобы использовать возраст в любом месте приложения, используйте App.getAge();

Комментарии:

1. К сожалению, существует несколько переменных возраста (для разных пользователей), поэтому я не могу сохранить их в SharedPref .

2. Это Java? Этот вопрос адресован Kotlin.

3. В этом случае сохраните их в базе данных SQLite и сделайте идентификатор пользователя в качестве первичного ключа для хранения и извлечения сведений о возрасте. и вы могли бы использовать the room для простой реализации того же самого.