Как сохранить пары ключ-значение в файле, который будет храниться во внутренней памяти Android? - PullRequest
1 голос
/ 01 сентября 2011

У меня есть некоторая информация, которую нужно сохранить во внутренней памяти. Я хотел бы хранить в форме пар ключ-значение, как это делается в SharedPreferences. Я думал о создании JsonObject и сохранении и получении таким образом. Есть ли другой способ сохранить данные во внутренней памяти в виде пар ключ-значение?

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Стандартный способ хранения данных Java - это использование сериализации - вот для чего он нужен.В большинстве случаев реализация Serializable довольно проста. Этот сайт предлагает хороший учебник по основам сериализации, который может быть легко адаптирован к среде Android.

Создав HashMap, вы можете сериализовать HashMap в файл для удобного поиска ваших данныхв форме ключ / значение.Практически все коллекции библиотек поддерживают Serializable, поэтому вы также можете хранить другие типы Map / List.

Так что же использовать - Serialization или JSONObject?Это действительно зависит от того, насколько важна эффективность и насколько сложны вещи, которые вы хотите сохранить.

Как правило, самая большая стоимость в любом случае - это фактический процесс записи данных в файл, поэтому JSONObjects почти всегда будетменьше и проще, они могут быть немного быстрее.Это хорошо для хранения строк или очень простых объектов, которые можно легко превратить в JSON. Если у вас очень сложный класс с десятками членов и множеством возможных состояний, может быть проще и эффективнее использовать сериализацию.Фактическая разница в стоимости между этими вариантами в большинстве случаев будет незначительной и будет иметь значение только в том случае, если вам придется многократно выполнять чтение и запись.

Поэтому используйте JSON для базовых типов и сериализацию для сложных типов (вы даже можете сохранить сериализованный объект в объекте JSON!)

0 голосов
/ 01 сентября 2011

Очень простая база данных SQLite сделает работу.Существует множество учебных пособий, и все, что вам нужно, это отдельная таблица с 3 столбцами: _id, key, value.

Я лично нашел Этот урок отличная отправная точка.

DB всегда нужен контекст, чтобы заставить мяч двигаться, поэтому для такой простой ситуации как получить / установить, как это, создание небольшого класса со следующими сигнатурами методов сделает жизнь по-настоящему легкой:

public static void set(Context context, String key, String value);
public static String get(Context context, String key);

Дляболее сложные объекты, используйте Parcelable или Serialization:

public static void set(Context context, String key, Serializable value);
public static Serializable(Context context, String key); 
...