Android ArrayList пользовательских объектов - Сохранить в SharedPreferences - Serializable?
У меня есть ArrayList объекта. Объект содержит типы "Bitmap" и "String", а затем просто getters и seters для обоих. Прежде всего, это сериализуемое Bitmap?
Как я могу сериализовать это, чтобы сохранить его в SharedPreferences? Я видел, что многие люди задают подобный вопрос, но никто, кажется, не дает хорошего ответа. Я бы предпочел некоторые примеры кода, если это вообще возможно.
Если растровое изображение не является сериализуемым, то как я могу сохранить этот массив ArrayList?
большое спасибо.
Ответы
Ответ 1
Да, вы можете сохранить ваш составной объект в общих настройках. Давай скажем..
Student mStudentObject = new Student();
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Editor prefsEditor = appSharedPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(mStudentObject);
prefsEditor.putString("MyObject", json);
prefsEditor.commit();
..и теперь вы можете получить свой объект как:
SharedPreferences appSharedPrefs = PreferenceManager
.getDefaultSharedPreferences(this.getApplicationContext());
Gson gson = new Gson();
String json = appSharedPrefs.getString("MyObject", "");
Student mStudentObject = gson.fromJson(json, Student.class);
Для получения дополнительной информации нажмите здесь.
Если вы хотите получить ArrayList
объекта любого типа, например Student
, используйте:
Type type = new TypeToken<List<Student>>(){}.getType();
List<Student> students = gson.fromJson(json, type);
Ответ 2
Ответ выше работает, но не для списка:
Для сохранения списка объектов выполните следующие действия:
List<Cars> cars= new ArrayList<Cars>();
cars.add(a);
cars.add(b);
cars.add(c);
cars.add(d);
gson = new Gson();
String jsonCars = gson.toJson(cars);
Log.d("TAG","jsonCars = " + jsonCars);
Прочитайте объект json:
Type type = new TypeToken<List<Cars>>(){}.getType();
List<Cars> carsList = gson.fromJson(jsonCars, type);
Ответ 3
Для меня это сработало вот так:
Поместите значения в SharedPreferances:
String key = "Key";
ArrayList<ModelClass> ModelArrayList=new ArrayList();
SharedPreferences shref;
SharedPreferences.Editor editor;
shref = context.getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = gson.toJson(ModelArrayList);
editor = shref.edit();
editor.remove(key).commit();
editor.putString(key, json);
editor.commit();
Чтобы получить значения из SharedPreferances:
Gson gson = new Gson();
String response=shref.getString(key , "");
ArrayList<ModelClass> lstArrayList = gson.fromJson(response,
new TypeToken<List<ModelClass>>(){}.getType());
Ответ 4
Для сохранения:
public static void saveSharedPreferencesLogList(Context context, List<PhoneCallLog> callLog) {
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
SharedPreferences.Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(callLog);
prefsEditor.putString("myJson", json);
prefsEditor.commit();
}
Для загрузки:
public static List<PhoneCallLog> loadSharedPreferencesLogList(Context context) {
List<PhoneCallLog> callLog = new ArrayList<PhoneCallLog>();
SharedPreferences mPrefs = context.getSharedPreferences(Constant.CALL_HISTORY_RC, context.MODE_PRIVATE);
Gson gson = new Gson();
String json = mPrefs.getString("myJson", "");
if (json.isEmpty()) {
callLog = new ArrayList<PhoneCallLog>();
} else {
Type type = new TypeToken<List<PhoneCallLog>>() {
}.getType();
callLog = gson.fromJson(json, type);
}
return callLog;
}
PhoneCallLog - мое пользовательское имя объекта. (Содержит строковые, длинные и логические значения)
Ответ 5
Пример, приведенный выше, работал как шарм.
Вот пример Kotlin
private var prefs: SharedPreferences = context?.getSharedPreferences("sharedPrefs", MODE_PRIVATE)
?: error("err")
private val gson = Gson()
спасти
fun saveObjectToArrayList(yourObject: YourObject) {
val bookmarks = fetchArrayList()
bookmarks.add(0, yourObject)
val prefsEditor = prefs.edit()
val json = gson.toJson(bookmarks)
prefsEditor.putString("your_key", json)
prefsEditor.apply()
}
читать
fun fetchArrayList(): ArrayList<YourObject> {
val yourArrayList: ArrayList<YourObject>
val json = prefs.getString("your_key", "")
yourArrayList = when {
json.isNullOrEmpty() -> ArrayList()
else -> gson.fromJson(json, object : TypeToken<List<Feed>>() {}.type)
}
return yourArrayList
}
Ответ 6
Напишите код в ваших общих настройках:
public class MySharedPrefernce {
private Context context;
private String PREF_NAME = "UserPreference";
private int PRIVATE_MODE = 0;
private SharedPreferences preferences;
private SharedPreferences.Editor editor;
private DataKey = "CART_RESTAURANTS";
//constructor
public MySharedPrefernce(Context context) {
this.context = context;
this.preferences = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = preferences.edit();
}
//add data
public void saveRestaurantToSharedPrefs(List<CartRestaurantModel> cartRestaurantModel) {
Gson gson = new Gson();
String jsonCart = gson.toJson(cartRestaurantModel);
editor.putString(DataKey, jsonCart);
editor.commit();
}
//get data
public ArrayList<CartRestaurantModel> getRestaurantToSharedPrefs() {
List<CartRestaurantModel> cartData;
if (preferences.contains(DataKey)) {
String jsonCart = preferences.getString(DataKey, null);
Gson gson = new Gson();
CartRestaurantModel[] cartItems = gson.fromJson(jsonCart,
CartRestaurantModel[].class);
cartData = Arrays.asList(cartItems);
cartData = new ArrayList<CartRestaurantModel>(cartData);
} else {
try {
return new ArrayList<CartRestaurantModel>();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return (ArrayList<CartRestaurantModel>) cartData;
}
//clear data
public void clearRestaurantSharedPrefsData() {
editor.clear();
editor.commit();
}
}
Напишите код в своей Деятельности/Фрагмент для хранения и получения:
public List<CartRestaurantModel> cartRestaurantModel = new ArrayList<CartRestaurantModel>(); // to maintain restaurant for cart menus
Хранить:
new MySharedPrefernce(this).saveRestaurantToSharedPrefs(cartRestaurantModel);
Извлечь:
cartRestaurantModel = new MySharedPrefernce(this).getRestaurantToSharedPrefs();
Ответ 7
## Для одного вызова и получения вашего списка используйте ## 'List models = new ArrayList<>();
Gson gson = new Gson();
String value= gson.toJson(models);
PreferenceManager.getDefaultSharedPreferences(context).edit().putString(value, "StringValueToRetrieve").apply();
Чтобы получить список, сделайте следующее
String value=PreferenceManager.getDefaultSharedPreferences(context).getString("StringValueToRetrieve", "noValue");
if(!value.contains("noValue")){
Gson gson = new Gson();
List<Model> models= gson.fromJson(value,
new TypeToken<List<Model>>(){}.getType());
}
'
Ответ 8
Предположим, у вас есть класс под названием Лекарства. Вы можете использовать следующие функции:
public static void saveMedicineToList(Medication medication){
ArrayList<Medication> medicationArrayList = getListOfMedication();
if(medicationArrayList == null) medicationArrayList = new ArrayList<>();
medicationArrayList.add(medication);
saveListOfMedicine(medicationArrayList);
}
public static void saveListOfMedicine(ArrayList<Medication> medicationArrayList){
SharedPreferences shref;
SharedPreferences.Editor editor;
shref = PreferenceManager.getDefaultSharedPreferences(SakshamApp.getInstance());
Gson gson = new Gson();
String json = gson.toJson(medicationArrayList);
editor = shref.edit();
editor.remove(KEY_MIDICINES_LIST).commit();
editor.putString(KEY_MIDICINES_LIST, json);
editor.commit();
}
public static ArrayList<Medication> getListOfMedication(){
SharedPreferences shref = PreferenceManager.getDefaultSharedPreferences(SakshamApp.getInstance());
Gson gson = new Gson();
String response=shref.getString(KEY_MIDICINES_LIST , "");
ArrayList<Medication> medicationArrayList = gson.fromJson(response,
new TypeToken<List<Medication>>(){}.getType());
return medicationArrayList;
}