#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 для хранения псевдонимов. таким образом, вы можете использовать один и тот же ключ (поэтому нет ограничений на строковый шаблон)