Как сохранить ArrayList состоящий из объектов в sharedPreferences
Я сохраняю ArrayList swedish1voc (словарь шведских слов для 1 уровня), состоящий из стрингов, в SharedPreferences вот таким образом:
public void saveData() {
Log.d(TAG, "saveData: called");
SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
Gson gson = new Gson();
String jsonSw1 = gson.toJson(swedish1voc);
editor.putString("sw1 list", jsonSw1);
editor.apply();
}
Прекрасно. А как мне сохранить ArrayList final1voc, состоящий из объектов <Word>?
(каждый объект - это шведское слово, его русский перевод (то есть 2 стринга) и +аудиофайл озвучки)
Т.е. в первом случае я пишу:
String jsonSw1 = gson.toJson(swedish1voc);
А во втором случае я пишу:
"????..." jsonFinal1 = gson.toJson(final1voc);
Вот что там вместо вопросов должно быть?
Ответы (1 шт):
Shared Preference не предназначен для хранения подобных штук. Shared Preference предназначен для хранения настроек приложения, каких-то простых данных вроде строковых ID объектов (и то если это не список на 1000 объектов).
Если вы хотите хранить более сложные объекты то вам нужно создавать базу данных в вашем приложении. SQLite - это БД которая работает на Android из коробки. Но она достаточно низкоуровневый инструмент, а это чревато ошибками и даже Google рекомендует не использовать ее в чистом виде. Поэтому лучше используйте Room Database.
Конечно никто вам не запретит хранить в Shared Preference хоть целую базу данных. Как вариант, вы можете все ваши объекты сериализовать в строковый JSON, но вы потеряете возможность удобно работать с вашими данными. По сути это будет просто огромная строка из которой вам трудно будет достать какие-то данные выборочно.