Если я правильно понимаю, основная проблема заключается в том, что нет универсально принятого сопоставления JSON для карты Java, особенно когда ключ более сложный, чем строка. Я видел, что GSON использует один подход (рассматривайте ключ как объект), тогда как Джексон берет другое (сериализует ключ к строке). C #, эквивалентный Карте (Словарь), использует третий подход (рассматривая каждую запись как объект с ключом по своему усмотрению со свойствами, называемыми «ключ» и «значение»). Поскольку Swagger пытается быть агностиком для языка и сериализатора, это ставит его в невозможное положение.
Как указал mbaird, нельзя хранить как Float.
Но вы можете изменить EditTextPreference
на обычный вид Preference
и реализовать для него событие click
. Таким образом, вы сможете создавать и показывать свой собственный диалог для редактирования значения, и, таким образом, вы можете ограничить формат и сохранить его как файл с плавающей точкой в файле настроек.
Если вы используете встроенный API экрана настроек вместо написания собственных диалоговых окон настроек или действий, тогда вы будете немного ограничены в некоторых отношениях . Например, EditTextPreference всегда будет хранить значение как String.
Из документа API :
Это предпочтение сохранит строку в SharedPreferences.
Замечу, что, похоже, у вас нет никакого способа ограничить пользователя вводом действительного числа с плавающей запятой в текстовое поле. Что бы вы сделали, если бы они набрали «abc»?
В 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
}