Я знаю, что эта тема немного старая.Но я все равно опубликую это, надеясь, что это может кому-то помочь.Мы можем хранить поля любого объекта с общим предпочтением путем сериализации объекта в строку.Здесь я использовал GSON
для сохранения любого объекта в общем предпочтении.
Сохранить объект в предпочтении:
public static void saveObjectToSharedPreference(Context context, String preferenceFileName, String serializedObjectKey, Object object) {
SharedPreferences sharedPreferences = context.getSharedPreferences(preferenceFileName, 0);
SharedPreferences.Editor sharedPreferencesEditor = sharedPreferences.edit();
final Gson gson = new Gson();
String serializedObject = gson.toJson(object);
sharedPreferencesEditor.putString(serializedObjectKey, serializedObject);
sharedPreferencesEditor.apply();
}
Получить объект из предпочтения:
public static <GenericClass> GenericClass getSavedObjectFromPreference(Context context, String preferenceFileName, String preferenceKey, Class<GenericClass> classType) {
SharedPreferences sharedPreferences = context.getSharedPreferences(preferenceFileName, 0);
if (sharedPreferences.contains(preferenceKey)) {
final Gson gson = new Gson();
return gson.fromJson(sharedPreferences.getString(preferenceKey, ""), classType);
}
return null;
}
Примечание:
Не забудьте добавить compile 'com.google.code.gson:gson:2.6.2'
к dependencies
в вашем Gradle.
Пример :
//assume SampleClass exists
SampleClass mObject = new SampleObject();
//to store an object
saveObjectToSharedPreference(context, "mPreference", "mObjectKey", mObject);
//to retrive object stored in preference
mObject = getSavedObjectFromPreference(context, "mPreference", "mObjectKey", SampleClass.class);
Обновление:
Как указывалось в комментариях @Sharp_Edge, указанное выше решение не работает с List
.
Небольшое изменениеподпись getSavedObjectFromPreference()
- от Class<GenericClass> classType
до Type classType
сделает это решение обобщенным.Подпись измененной функции,
public static <GenericClass> GenericClass getSavedObjectFromPreference(Context context, String preferenceFileName, String preferenceKey, Type classType)
Для вызова
getSavedObjectFromPreference(context, "mPreference", "mObjectKey", (Type) SampleClass.class)
Happy Кодирование!