Общие настройки — должен ли я хранить значения ключей в виде строк? Возможная плохая практика

#android #sharedpreferences

#Android #sharedpreferences

Вопрос:

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

Пример: у меня есть счетчик с 3 выпадающими опциями: apple, banana, orange

В моем счетчике я выбираю опцию orange и сохраняю ее в общих настройках с ключом KEY_SPINNER_FRUIT_OPTION , каким типом данных должно быть значение? В настоящее время я сохраняю его как строки

orange

Было бы лучше использовать Integer вместо этого?

String lastSelectedSpinnerOption = getSharedPref().getLastSavedValue("KEY_SPINNER_FRUIT_OPTION");

 if(lastSelectedSpinnerOption.equals("orange")){
   mSpinner.setSelection(2);
}
 

или

Integer lastSelectedSpinnerOption = getSharedPref().getLastSavedValue("KEY_SPINNER_FRUIT_OPTION");

 if(lastSelectedSpinnerOption == 2){
   mSpinner.setSelection(2);
}
 

Ответ №1:

Если вы сохраните Integer ваш код, он не будет обслуживаться. Если вы измените позиции элементов (или добавите новый элемент в сохраненную позицию) в Spinner, ваш код не будет работать должным образом.

Что вы можете сделать, так это сохранить строковое значение выбранного элемента в SharedPrefs , а затем:

 int position = adapter.getPosition(myValueFromSharedPrefs);
position = position > 0 ? position : 0; // if this element was removed, choose first item of the list
mSpinner.setSelection(position);
 

Ответ №2:

Ну, нет никакой наилучшей практики в отношении того, какой тип вы должны вводить SharedPreferences (если это принятый тип для API).

На самом деле это полностью зависит от того, что вы будете делать с этим значением. Если ваша цель — сохранить состояние пользовательского интерфейса, и вы абсолютно уверены, что сохраненная позиция будет содержать то же String значение, вы можете сохранить Integer .

Но я бы предпочел сохранить String значение, поскольку пользователь намеревается выбрать «оранжевый», и когда придет время восстановить состояние пользовательского интерфейса, я бы искал позицию, соответствующую значению «оранжевый».