Android: SharedPreferences

Полдня потратил, чтобы врубиться в класс SharedPreferences для Андроида.
Вот что пишут везде.

Во-первых в Activity нужна public static final константа, характеризующая набор настроек (которых может быть много разных):
public static final String MY_PREFERENCES = "MyPrefs";

Для сохранения общих настроек приложения нужен вот такой код:
SharedPreferences settings = getSharedPreferences(MY_PREFERENCES,0);
SharedPreferences.Editor prefEditor = settings.edit();
prefEditor.putString("FirstString", "abcdefg");
prefEditor.putInt("SecondString", 55);
prefEditor.commit();

В данном коде производится сохранение в общих настройках двух переменных – типа String и типа Integer. Вообще, класс SharedPreferences – это офигенно удобно, во всяком случае с первого взгляда. Настройки сохраняются, программа закрывается, открывается, настройки загружаются. Не надо думать куда же они сохраняются – Android берет это на себя.

Для загрузки их же при старте приложения (или конкретного Activity, чьи настройки нужны) в методе onCreate прописывать надо:
SharedPreferences settings = getSharedPreferences(MY_PREFERENCES,0);
String str1;
Integer i2;

if(settings.contains("FirstString")){
str1 = settings.getString("FirstString", "");
}else
{
str1 = "";
}

if(settings.contains("SecondString")){
i2 = settings.getInt("SecondString", 0);
}
else
{
i2 = 0;
}

Вроде бы всё работает. Вот только сохранять в настройки фиксированные значения неинтересно и не нужно никогда. А поэтому нужно использовать преобразования типов. Вот такие:

Чтобы преобразовать из Integer в String:

Integer a;
String str;
str = Integer.toString(a)

Преобразовать из String в Integer:

Integer a;
String str;
a = Integer.parseInt(str);

Интересная особенность контролов в Java: чтобы к примеру взять строку из контрола EditText и преобразовать её в Integer нужно сделать следующее:

Integer i;
EditText text;
text = (EditText) findViewById(R.id.editText1);
i = Integer.parseInt(text.getText().toString());

Забавно здесь то, что метод getText() у EditText’а возвращает нифига не String, а объект класса android.text.Editable – чтобы получить из него String и нужен вызов метода toString().

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>