SharedPreferences изменяет установленные значения после apply () - PullRequest
0 голосов
/ 07 августа 2020

Объявление переменной

public String am_PM1, am_PM2;
        
public static final String AM_PM1 = "";
public static final String AM_PM2 = "";

У меня есть 2 строковых значения, которые помещаются в sharedPreferences, но после того, как они вставлены и применены, второе значение в этом случае AM_PM2 перезаписывает AM_PM1. Если я изменю порядок выполнения и поставлю AM_PM2 перед AM_PM1, тогда AM_PM1 перезапишет первое значение.

Log.d("lol", "Value before 1: " + am_PM1);
Log.d("lol", "Value before 2: " + am_PM2);

editor.putString(AM_PM1, am_PM1);
editor.putString(AM_PM2, am_PM2);

editor.apply();

Log.d("lol", "" + sharedPreferences.getAll());

Log.d("lol", "Value after 1: " + sharedPreferences.getString(AM_PM1, ""));
Log.d("lol", "Value after 2: " + sharedPreferences.getString(AM_PM2, ""));

Скриншот вывода консоли:

введите описание изображения здесь

Ответы [ 3 ]

0 голосов
/ 07 августа 2020

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

0 голосов
/ 08 августа 2020

AM_PM1 и AM_PM2 равны. удалить public static final String AM_PM1 = ""; & public static final String AM_PM2 = ""; сделать это:

  editor.edit().putString("AM_PM1", am_PM1).apply();
  editor.edit().putString("AM_PM2", am_PM2).apply();
0 голосов
/ 07 августа 2020

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

public static final String AM_PM1 = "amPM1";
public static final String AM_PM2 = "amPM2";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...