Подтвердить что ты не робот

Сохранить список или установить в SharedPreferences

В моем приложении есть список значений String (около 5-20 символов каждый), которые я должен хранить настойчиво. SharedPreferences мне кажутся наиболее подходящими, так как это короткий список. Обычно он будет пустым или содержит всего несколько значений.

Я уже видел этот вопрос, который задает в основном то же самое, ответ не подходит, поскольку StringSet - это уровень API 11, и я настроен на Android 2.1 и который является API 7.

Учитывая обычно небольшой список строк, использование базы данных кажется мне полным избытком. Использование файла для хранения этого будет другим решением, но не настолько элегантным. Я рассмотрел создание ключей (например, "1", "2", "3" и т.д.), Но это на самом деле хуже, чем использование файла - особенно когда речь заходит о чтении моих данных.

В любом случае, если ничего другого не работает, мне придется перейти к файлу. Если моя идея просто непрактична с использованием SharedPreferences для API lvl 7, я был бы признателен также за это.

4b9b3361

Ответ 1

Я нашел самое легкое решение для хранения и извлечения списка элементов из SharedPreferences, чтобы просто сериализовать /deserilaize массив в/из JSON и сохранить его в строковой настройке.

Gson действительно помогает в этом.

READ:

SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
String value = prefs.getString("list", null);

GsonBuilder gsonb = new GsonBuilder();
Gson gson = gsonb.create();
MyObject[] list = gson.fromJson(value, MyObject[].class);

WRITE

String value = gson.toJson(list);
SharedPreferences prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
Editor e = prefs.edit();
e.putString("list", value);
e.commit();

Ответ 2

С помощью этого объекта → TinyDB--Android-Shared-Preferences-Turbo его очень просто.

TinyDB tinydb = new TinyDB(context);

поставить

tinydb.putList("MyUsers", mUsersArray);

чтобы получить

tinydb.getList("MyUsers");

Ответ 3

Если вы знаете порядок записей в списке и/или не имеет значения, вы можете "приклеить" их все в одну строку с выделенным разделителем и затем сохранить ее с помощью SharedPreferences. После его загрузки вы разделили бы String на записи на основе вашего разделителя. Что-то вроде String listEntries = "enty1;entry2;entry3" (точка с запятой как разделитель в этом случае). Но не знаю о проблемах с производительностью.