Java "объект настроек", сериализация / десериализация - PullRequest
3 голосов
/ 02 декабря 2009

( Код для Android На самом деле мне нужен код для переносимости между Android и Java SE.)

Я хочу иметь класс "settings" с различными настройками игры, например

public int map_size;
public String server_name;

и т.д.

К данным необходимо обращаться довольно часто (т.е. к элементам, а не к карте ключ-значение) и время от времени де-сериализовывать каким-либо стандартным способом (главным образом для отправки их по сети).

Я хочу иметь возможность

  1. Сериализация и десериализация объекта в XML или JSON без необходимости явной записи кода для каждого члена (но все же с некоторой степенью контроля над форматом).

  2. Определить некоторые (постоянные) метаданные о каждом элементе (значение по умолчанию, имя GUI, идентификатор XML, ...) таким образом, чтобы можно было легко изменять исходный код (я хочу иметь возможность чтобы добавить новое мета-свойство, определите для него значение по умолчанию и не нужно указывать его везде).

1 достижимо с помощью отражения. Я думал, что Java-аннотации для учеников подойдут для 2:

@Setting(id = "server_name", name = "Server title", default = "Server0")
public String server_name;

Но похоже, что (определяемые пользователем) аннотации еще не работают в Android - код, использующий их, приводит к сбою компилятора ...

Какой будет самый простой способ хранения метаданных о настройках (или другой способ приблизиться ко всему этому)?

  • Сохранить информацию о настройках в каком-нибудь внешнем XML-файле?

  • Сохранить его в структуре данных Java с содержимым, определенным в коде? Определение данных таким способом как-то кажется очень громоздким, особенно по сравнению с аргументами аннотаций ключевых слов.

Ответы [ 3 ]

3 голосов
/ 09 января 2010

К вашему сведению, похоже, что Джексон был исправлен для работы с Android в выпуске Jackson 0.9.7.

Хотя я согласен с Дэниелом Лью, что использование встроенных настроек Android - лучшее решение для клиента Android. Для клиента JavaSE класс Properties - хороший способ сохранить настройки. Есть также пакет настроек JavaSE, но он может сделать больше, чем нужно.

1 голос
/ 02 декабря 2009

Хотя я не уверен, насколько хорошо они работают на Android, XStream или Джексон предоставляют настраиваемую сериализацию объектов Java или XML или JSON. Обратите внимание, что XStream поддерживает вывод XML и JSON, Джексон - просто JSON.

1 голос
/ 02 декабря 2009

Есть ли какая-то особая причина, по которой вы не используете встроенные настройки Android ? Поскольку все настройки игры являются примитивами (или строками), это, вероятно, самый простой способ сохранить настройки. Кроме того, он хорошо синхронизируется с PreferenceActivity , если в итоге вы создаете страницу настроек (в ApiDemos есть несколько примеров предпочтений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...