Как сохранить настройки пользователя в приложении Adobe Flex / AIR

Каков стандартный способ хранения пользовательских настроек в приложении Flex для AIR? Мне нужно хранить простые параметры, такие как списки недавно открытых файлов, положения и размеры окон и т. Д.


person geschema    schedule 13.06.2011    source источник


Ответы (4)


Я думаю, что наиболее гибкий способ - использовать локальную базу данных SQLite. Это дает вам неограниченное структурированное хранилище и при необходимости шифрование. См. введение Питера Элста если вы хотите получить больше информации.

person dain    schedule 13.06.2011
comment
Это совершенно правильный подход, хотя SQLite доступен только для приложений Adobe AIR - если вы не разместите его на сервере; что редко. Это конкретная причина, по которой я не упомянул об этом. Тем не менее, я думаю, что я ответил под впечатлением, что пользователь не задавал конкретный вопрос по AIR, а перечитал вопрос, я считаю, что мое понимание было ошибочным. Итак, +1. - person JeffryHouser; 14.06.2011
comment
Почему, на ваш взгляд, лучше всего подходит SQLite? Я считаю, что SQLite немного избыточен для большинства реализаций настроек. Если все, что у вас есть, это список, я предпочитаю общие объекты ... но, возможно, мне не хватает преимущества использования SQLite в качестве удобного способа. - person Brian Genisio; 14.06.2011
comment
Если пользовательские настройки определенно останутся небольшими, тогда общие объекты проще и уместнее, но причина, по которой я предпочитаю подход SQLite, - это гибкость для расширения, вы даже можете сохранять там эскизы и т. Д. Кроме того, если нужно сохранить пароль, я не уверен, действительно ли вы можете правильно защитить SO, в то время как использовать зашифрованный SQLite очень просто. - person dain; 14.06.2011

Мой любимый способ сделать это - объединить VO с LSO (локальный общий объект). Если у вас много настроек, это не сработает. Преимущество состоит в том, что вы получаете строго типизированный объект настроек, который поэтому привязывается и имеет самоанализ и завершение кода.

Круто то, что для управления LSO достаточно всего 5 строк кода. Кроме того, если вы хотите хранить какие-либо конфиденциальные данные, также довольно легко управлять локальным зашифрованным хранилищем.

registerClassAlias("SettingsVO",SettingsVO);  //This lets us store a typed object in LSO
var settings:SettingsVO;
var settingsSO = SharedObject.getLocal("settings");   
//Check to make sure settings exist... if not, create a new settings object
if( settingsSO.size && settingsSO.data && settingsSO.data.settings){
    settings = settingsSO.data.settings as SettingsVO;
}else{
    settings = new SettingsVO();
}

Теперь, если вы хотите сохранить настройки, просто выполните

settings.someSetting = "newValue";
settingsSO.data.settings = settings;
settingsSO.flush();

И это решение работает как на AIR, так и на Flex в любом браузере. Новые браузеры удаляют эти данные при очистке файлов cookie, так что будьте осторожны.

person Jonathan Rowny    schedule 13.06.2011

Не существует «стандартного» способа, но существует множество подходов, все из которых сводятся к сохранению предпочтений пользователя, их последующей загрузке во время выполнения на основе некоторых учетных данных uesr и последующему изменению приложения на основе этих предпочтений.

Вы можете хранить их в базе данных на стороне сервера, такой как SQL Server или MySQL; затем используйте flex для вызова службы, которая запрашивает базу данных и возвращает данные.

Вы можете сохранить их как Shared Objects, которые представляют собой Flash-версию файлов cookie браузера. (Я считаю, что они работают и с приложениями AIR). Это может стать обременительным при большом количестве данных.

Вы можете сохранить их в XML-документе и выбросить на сервер. Концептуально это не сильно отличается от их хранения в базе данных на стороне сервера; но может стать очень утомительным, если у вас много пользователей.

Вы также можете хранить их в приложении AIR локально, используя базу данных SQLite. SQLite - это встроенная база данных, используемая в Adobe AIR.

person JeffryHouser    schedule 13.06.2011
comment
@Babibu Согласно этим документам вы ошибаетесь: help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/. Общие объекты доступны начиная с AIR 1.0. Моя мобильная игра, созданная с помощью AIR, использует общий объект для обмена статистикой игры; так что я могу подтвердить на собственном опыте, что они действительно работают. - person JeffryHouser; 03.12.2013
comment
Да, вы правы, извините. Также я проголосовал против и не могу отменить, пока ответ не будет отредактирован. - person Ilya Gazman; 05.12.2013
comment
;) Я отредактировал его, чем добавил ссылку на живую документацию по общим объектам из моего комментария. - person JeffryHouser; 05.12.2013

Я не заморачиваюсь ни с какими причудливыми вещами. Просто сохраните его в XML-файле в каталоге приложения. Сделанный.

Filestream выдает ошибку, если вы пытаетесь сохранить его с помощью File.applicationDirectory. Я просто обманываю программу ...

var trickFile:File = File.applicationDirectory;
var file:File = new File(trickFile.nativePath + mySettings.xml);

Воздух попадает в нее каждый раз.

person Andrew Benjamin    schedule 25.02.2013