Несколько значений в SharedPreferences

#java #android #sharedpreferences #string-matching

#java #Android #sharedpreferences #сопоставление строк

Вопрос:

Я пытаюсь сохранить два значения под одним ключом для общих настроек в Android. Причина, по которой я хочу это сделать, заключается в том, что я могу проверить значение строки, а затем заменить его. Например, я хочу иметь общие предпочтения (key1,stringA,stringB). В моей программе я хочу проверить, соответствует ли TextView stringA, и если это так, замените его на stringB . Есть ли способ сделать это с помощью общих настроек? Если да, то как бы я реализовал сохранение двух жал под одним ключом? Если нет, то как я могу это сделать лучше? Спасибо за любую помощь.

До сих пор я проверял значение TextView и заменял его общим предпочтением, подобным этому…

 if (sharedpreferences.contains(Name)) {
        if (sharedpreferences.getString(Name, "").equals(stringname.getText())) {
            name.setText(sharedpreferences.getString(Name, ""));
            //I want to replace name(which is the textView) with StringB instead.
        }
        else {
            name.setText("Didn't Match");
        }
    }
 

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

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

1. Добавьте оба значения через запятую против ключа. Затем используйте строковые манипуляции, чтобы получить значения и выполнить свою логику.

2. Так что просто добавьте еще одно значение после первого с запятой? Какие манипуляции со строками? Я бы поместил их в массив или ..?

3. Если вы используете строку, разделенную запятыми, будьте осторожны, если какая-либо из исходных строк содержит запятые. Вы должны экранировать / отменить их.

Ответ №1:

Вы не можете этого сделать, потому что это перезапишет значения, если вы используете один и тот же ключ в любом месте.

Но да, есть одна альтернатива, с помощью которой вы можете хранить несколько строковых значений в одном ключе предпочтений, каждое значение разделяется запятой. Затем вы можете использовать convertStringToArray для скрытия его в массив строк.

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

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

1. смотрите Объяснение выше в ответе Джозефа Флавия, чтобы объяснить, почему мне нужно это сделать. Я думаю, что convertStringToArray может сработать, но как мне реализовать это, используя мой приведенный выше код?

2. @user3124083 хорошо понял. Попробуйте реализовать материалы с альтернативой, о которой я упоминал выше.

Ответ №2:

Я не вижу смысла, поскольку вы упомянули, что делаете это так только потому, что

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

Вы накладываете на себя ненужные ограничения. Почему бы просто не сохранить строки под разными ключами?

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

1. Я использую это для того, чтобы иметь возможность добавлять псевдонимы для определенных строк. Допустим, служба обновляет имя (A) в textview, и у пользователя есть псевдоним (B) для этого человека, вместо исходного имени (A), отправляемого в textview, публикуется псевдоним (B). @josephus

2. в этом случае я рекомендую вам вместо этого добавить некоторую логику в именование ключей. например, у вас может быть префикс «nickname-«, который вы добавляете к своему обычному ключу.

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