#android #sharedpreferences #android-preferences
#Android #sharedpreferences #android-настройки
Вопрос:
Существует метод getFloat()
для извлечения значения с плавающей запятой из SharedPreferences
API Android. Тем не менее, в xml EditTextPreference
всегда сохраняется строковое значение, даже если определено числовое значение.
Можно было бы ожидать getFloat()
автоматического возврата this, но вместо этого он выдает ClassCastException
, и мы должны использовать Float.parseFloat(SharedPreferences.getString())
, чтобы получить это значение.
Есть ли буквально никакой пользы getFloat()
или я что-то здесь упускаю?
Комментарии:
1. Если я правильно понимаю, что касается хранения значений текстовых полей редактирования, да, вы сохраняете их как строки и не используете getFloat() . Насколько мне известно, getFloat() используется в большей степени для хранения математических переменных или даже, возможно, координат GPS.
Ответ №1:
Метод getFloat() существует для извлечения значения с плавающей запятой из API SharedPreferences Android.
ДА.
Тем не менее, в xml EditTextPreference всегда сохраняет строковое значение, даже если определено числовое значение.
Я думаю, вы здесь что-то путаете. Вы устанавливаете SharedPreferences
значение равно элементам в a PreferenceScreen
.
PreferenceScreen's
сохраните все их значения в вашем SharedPreferences
, и это правда, что EditTextPreferences
вы не можете сохранить значение с плавающей точкой, но, тем не менее, вы можете сохранить значение с плавающей SharedPreferences
точкой в себе:
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = prefs.edit();
editor.putFloat("aFloat", 1.2f);
editor.commit();
а затем извлеките значение с плавающей точкой следующим образом:
float someFloat = prefs.getFloat("aFloat", 0.0f);
Комментарии:
1. Ага! Так что для этого есть польза! Хотя я все еще хотел, чтобы getFloat() попытался сначала привести строку, прежде чем жаловаться.
2. Так же, как вопрос, представляющий интерес, не имея возможности проверить себя прямо сейчас, позволит ли вам сохранить 1.2 как значение с плавающей точкой или вам нужно явно объявить его как значение с плавающей точкой с 1.2f
3. @zgc7009 упс, да, конечно, это должно быть 1.2f. Спасибо, я исправил это.
4. SharedPreferences.getLong() также приводит к ClassCastException — я думаю, что эти методы на самом деле бесполезны
5. @Price можете ли вы дать мне точный журнал? Этого не должно быть.