Android ArrayList пользовательских объектов-сохранить в SharedPreferences-сериализуемый?
У меня есть ArrayList объекта. Объект содержит типы 'Bitmap' и 'String', а затем просто геттеры и сеттеры для обоих. Прежде всего, является ли растровое изображение сериализуемым?
Как бы я мог сериализовать это, чтобы сохранить его в SharedPreferences? Я видел, как многие люди задают подобный вопрос, но ни один из них не дает хорошего ответа. Я бы предпочел некоторые примеры кода, если это вообще возможно.
Если растровое изображение не сериализуется, то как мне сохранить это ArrayList?
большое спасибо.
5 ответов:
Да, вы можете сохранить свой составной объект в общие предпочтения. Скажем так..
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);
ответ выше работает, но не для списка:
для сохранения списка объектов сделайте так:
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);
для меня это работало так:
поместите значения в 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());
Для Спасения:
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-это имя моего пользовательского объекта. (Содержит строковые, длинные и логические значения)
напишите код в общих настройках:
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();