Android Значение SharedPreferences не обновляется во время работы приложения - PullRequest
0 голосов
/ 25 мая 2020

У меня есть 2 действия, например, для MainActivity и PlayActivity. Я получаю значение currentLevel из SharedPreferences в MainActivity, используя следующий код.

sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);
     // comment this to see if value is saved or not
    currentLevel=sharedPreferences.getInt("currentlevel",1);

, и я обновляю значение currentLevel в PlayActivity, используя следующий код.

sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("currentlevel",currentLevel+1);
    editor.apply();

Теперь моя проблема в том, что запущенное приложение, я не могу обновить его значение. Например, пока я нахожусь в PlayActivity, и я выиграл уровень, и я обновил значение Shared Preference, но при запуске приложения, если я go вернулся к MainActivity и попытался получить значение CurrentLevel, я получил предыдущее значение, не обновленное. Пожалуйста помоги. Еще одна вещь, если я обновлю свое приложение sh в будущем, sharedPrefrence также обновится со значением по умолчанию 1 или сохранит свое предыдущее значение.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Я создал для вас небольшой образец. Это проект «Пустое действие» (согласно последнему шаблону Android Studio) со всеми значениями по умолчанию (в Kotlin).

После создания проекта я добавил второе пустое действие (через то же template), а затем я изменил их макеты, добавив в них кнопку редактирования и текст.

Что делают действия при запуске?

  1. Загружает любое существующее значение Shared Preference.
  2. Заполняет EditText существующим значением (по умолчанию 0)

Что делает нажатие кнопки?

  1. Сохранить существующее значение в общих настройках.
  2. Запускает следующее (или предыдущее) действие.

Действие 1 переходит в действие 2, а действие 2 возвращается к 1.

Обратите внимание, что независимо от того, какое число и какое действие вы используете, другой сразу выбирает его.

Вот где я оставил проект для вашей проверки:

https://github.com/Gryzor/MySharedPreferences

Если вы не хотите возиться с git clone, вот что делает действие 1:

        // Obtain our private Shared Preferences 
        // This comes from ContextWrapper.
        val sharedPreferences = getSharedPreferences("sample", Context.MODE_PRIVATE)

        // restore existing value
        val current = sharedPreferences.getInt("A_NUMBER", 0)
        editText.setText("$current")

        button.setOnClickListener {
            val text = editText.text.toString()

            val value = try {
                text.toInt()
            } catch (e: NumberFormatException) {
                0
            }

            // Save the current value
            sharedPreferences.edit().putInt("A_NUMBER", value).apply()

            // ... and go to the next activity
            val intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)
            finish()
        }

Другое действие идентично, без строки намерения:

val intent = Intent(this, MainActivity::class.java)

Заключение

На что я хотел обратить внимание всей этой чепухой, так это на то, что вы неправильно управляете своими экземплярами и неправильно используете что-то . Трудно сказать, потому что мы не видели ваш исходный код.

Удачи: -)

0 голосов
/ 25 мая 2020
sharedPreferences= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putInt("currentlevel",currentLevel+1);
    editor.commit();
...