Если вы попали сюда, вы столкнулись с трудностями, связанными с сохранением Общих предпочтений Android в Сети. В этой статье будет продемонстрирован практический метод абстрагирования всех возможных методов чтения и записи для общих предпочтений в простой универсальный класс.
Фон
По сути, общие предпочтения – это XML-файл, который служит небольшим хранилищем пользовательских предпочтений (настроек). при разработке приложения для Android существует множество функций или настроек, которые жестко привязаны к вкусу пользователя, таких как цвета, темы, шрифты, мелодии звонка и т. Д., Поэтому эти настройки необходимо где-то сохранить, чтобы их можно было извлечь при следующем выполнении приложения, и именно тогда возникает необходимость в небольшом хранилище. Android предложил простой механизм для обеспечения хранения пользовательских предпочтений, представив библиотеку общих предпочтений.
Простое хранение настроек, таких как цвет фона, выглядит следующим образом
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(applicationContext); SharedPreferences.Editor editor = sp.edit(); editor.putString("background_color", "green"); editor.apply();
Затем Android сохранит его в/data/data/YOUR_APP_PACKAGE_NAME/shared_prefs/YOUR_APP_PACKAGE_NAME_preferences.xml вот так
и позже значение “background_color” может быть извлечено из общих ссылок следующим образом
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(applicationContext); String defaultValue="white"; String Value = sp.getString("background_color", defaultValue); Issue
Как видно выше, для хранения строкового значения в sharedpreferences необходимо вызвать метод putString, а также метод getString для его извлечения. Кажется довольно простым, пока приложение не начнет расти, и количество настроек, которые оно требует для хранения, увеличивается вместе с ним.
С другой стороны, для хранения логического значения необходимо вызвать out Boolean()/getBoolean() для сохранения и извлечения предпочтений соответственно.
Решение
Первое решение, которое появится, – использовать статический вспомогательный класс для выполнения этой операции, поэтому для извлечения/хранения строковых значений из общих настроек и для общих настроек что-то вроде приведенного ниже кода потребуется
private static String getPrefString(Context context,String prefName,String defaultValue){ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); String ret = sp.getString(prefName, defaultValue); return ret; } private static void setPrefString(Context context,String prefName,String value){ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sp.edit(); editor.putString(prefName, value); editor.apply(); }
Кроме того, для Boolean, набора строк, Float, Long и целого числа также потребуется по два метода (всего 12 методов), чтобы иметь возможность обрабатывать хранение/извлечение всех возможных типов, которые можно назвать грязными и ненужными.
Другим решением является использование дженериков, подобных приведенному ниже коду
И его можно использовать для хранения данных следующим образом
new PrefManager(applicationContext).set("background_color","green");
и для его извлечения следующим образом
new PrefManager(applicationContext).get("background_color","white");
Как видно, только с помощью двух методов обрабатываются все возможные типы данных, кроме того, использование является чистым, практичным и понятным. Я надеюсь, что вы нашли этот способ хранения/извлечения данных из/в общие настройки таким же полезным, как и я:)
Оригинал: “https://dev.to/alialp/gain-flexibility-with-generic-shared-preferences-for-android-55o”