Как сохранить 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 шт):

Автор решения: Sergei Buvaka

Shared Preference не предназначен для хранения подобных штук. Shared Preference предназначен для хранения настроек приложения, каких-то простых данных вроде строковых ID объектов (и то если это не список на 1000 объектов).

Если вы хотите хранить более сложные объекты то вам нужно создавать базу данных в вашем приложении. SQLite - это БД которая работает на Android из коробки. Но она достаточно низкоуровневый инструмент, а это чревато ошибками и даже Google рекомендует не использовать ее в чистом виде. Поэтому лучше используйте Room Database.

Конечно никто вам не запретит хранить в Shared Preference хоть целую базу данных. Как вариант, вы можете все ваши объекты сериализовать в строковый JSON, но вы потеряете возможность удобно работать с вашими данными. По сути это будет просто огромная строка из которой вам трудно будет достать какие-то данные выборочно.

→ Ссылка