2015-03-22 3 views
0

У меня есть несколько стеков и вы хотите их сохранить с помощью SharedPreferences. В SharedPreferences доступны только основные вещи. Есть ли простой способ сохранить сложные/настраиваемые структуры данных?Как сохранить стопки в SharedPreferences

+1

Как Маркус говорит в своем ответе, единственным вариантом является для преобразования структур данных в то, что идет в 'String': JSON, XML и т. Д.' SharedPreferences' на самом деле не является универсальной системой хранения данных - для этого используйте базу данных или какой-либо другой файл. – CommonsWare

ответ

3

Используя Gson, вы можете легко сохранить пользовательские объекты SharedPreferences

Сохранить:

Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson("MyObject"); 
prefsEditor.putString("MyObject", json); 
prefsEditor.commit(); 

Нагрузка:

Gson gson = new Gson(); 
String json = mPrefs.getString("MyObject", ""); 
MyObject obj = gson.fromJson(json, MyObject.class); 
2

Вы можете пойти с Марком ответом. Вот то, что я сделал в моем проекте:

магазин в общих префов:

 SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
     SharedPreferences.Editor edit = prefs.edit(); 

     Gson gson = new Gson(); 
      String json = gson.toJson(MyImages); 
      edit.putString("MyImages", json); 

извлечь из общих префов:

 Gson gson = new Gson(); 
    String json = PreferenceManager.getDefaultSharedPreferences(getActivity()).getString("MyImages", ""); 
    ArrayList<String> MyImages= new ArrayList<String>(); 
    MyImages=gson.fromJson(json, ArrayList.class); 

Таким образом, вы также не потерять структуру ваших данных (если это в некотором порядке).

Если вы поместили карту непосредственно в общие префы, вы потеряете порядок данных при извлечении Карты. Мне была важна последовательность, и gson + Arraylist работал отлично.

Другой способ не использовать SharedPrefs и хранить данные в файле (внутренняя память):

File file = new File(getDir("data", MODE_PRIVATE), "map");  
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file)); 
outputStream.writeObject(map); 
outputStream.flush(); 
outputStream.close(); 
Смежные вопросы