Как каждый объявляет тип предпочтения Android?

Если я правильно понимаю, основная проблема заключается в том, что нет универсально принятого сопоставления JSON для карты Java, особенно когда ключ более сложный, чем строка. Я видел, что GSON использует один подход (рассматривайте ключ как объект), тогда как Джексон берет другое (сериализует ключ к строке). C #, эквивалентный Карте (Словарь), использует третий подход (рассматривая каждую запись как объект с ключом по своему усмотрению со свойствами, называемыми «ключ» и «значение»). Поскольку Swagger пытается быть агностиком для языка и сериализатора, это ставит его в невозможное положение.

28
задан David R. 16 March 2010 в 18:54
поделиться

3 ответа

Как указал mbaird, нельзя хранить как Float.

Но вы можете изменить EditTextPreference на обычный вид Preference и реализовать для него событие click. Таким образом, вы сможете создавать и показывать свой собственный диалог для редактирования значения, и, таким образом, вы можете ограничить формат и сохранить его как файл с плавающей точкой в ​​файле настроек.

4
ответ дан Pentium10 28 November 2019 в 03:03
поделиться

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

Из документа API :

Это предпочтение сохранит строку в SharedPreferences.

Замечу, что, похоже, у вас нет никакого способа ограничить пользователя вводом действительного числа с плавающей запятой в текстовое поле. Что бы вы сделали, если бы они набрали «abc»?

9
ответ дан 28 November 2019 в 03:03
поделиться

В XML-настройках вы можете добавить параметр android: numeric со значением «целое число» . Таким образом, пользователь сможет ввести только допустимое целочисленное значение.

При загрузке параметра вы должны попытаться самостоятельно преобразовать его в число (поскольку все значения хранятся как Strings (@mbaird ниже)):

try {
  float val = Float.parseFloat(sp.getString("sample", "3.0f"));
} catch (NumberFormatException e) {
  // "sample" was not an integer value
  // You should probably start settings again
}
44
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: