![]() |
|
||||||||||
|
|||||
|
Застопорился на одном проэкте, решил создать Визуал Новеллу для Android, но проблема с созданием кофиг файла. Делаю подобную вещь впервые, гуглил и нашел код, на компьютере он записывал в хранилище данных(applicationStorageDirectory.nativePath), создавало там файл config.xml, где хранились конфигурационный данные приложения. На компе все прекрасно работало, загружало файл, при IO_ERROR, оно создавало файл и записывало в него настройки по-умолчанию, пускало загрузку файла заново. На телефоне оно не захотело создать или загрузить файл. Ошибок не видно, телефон ведь. Я сначала думал, что просто не отправлялся IO_ERROR, поэтому поставил создание файла в инициализации класса-загрузчика XML-файла. Результатов не дало.
Добавлено через 2 минуты applicationStorageDirectory я трейсил на компе, там вывело Documents&Settings/AppData/Roaming/AppName Добавлено через 42 минуты Стоп, я, кажется, понял, в чем проблема. Сейчас проверю разрешения приложения. Добавлено через 52 минуты Нет, ничего не изменилось. На телефоне ничего не изменилось. Добавлено через 2 часа 4 минуты Итак, что я нашел. Открыв RootExplorer, зашел в папку data, где по данным от Adobe хранится кэш и сторэйджи всех AIR-приложений. Вот, покопавшись в ней, нашел-таки свой файл, зайдя еще в некоторые директории. Все с ним в порядке. Читал он файл по тому же пути, по которому и отправлял. Почему не хотел загружать его - без понятия . Может кто-то мне подскажет об особенностях загрузки файлов из локального хранилища, или проблема, получается, в самом приложении? |
|
|||||
|
Судя по тому, что происходит в приложении, событие окончания загрузки файла из локального хранилища вообще не происходит.
Сейчас кину код класса. Но, повторюсь, на компьютере все нижеприведенное работает без проблем. //Класс doXML, который проводит все операции с XML. package com.instruments { import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.filesystem.File; import flash.filesystem.FileMode; import flash.filesystem.FileStream; import flash.display.MovieClip; public class doXML extends EventDispatcher { public static const SETTINGS_LOADED:String = "Settings is Loaded"; private var loader:URLLoader; public var xml:XML; public function doXML() { trace("class doXML initialize();"); } public function loadXML(path:String):void { trace("function doXML.loadXML();"); loader = new URLLoader(); loader.addEventListener(Event.COMPLETE, onLoadXML); loader.load(new URLRequest(path)); loader.addEventListener(IOErrorEvent.IO_ERROR, createDoc); } private function createDoc(e:IOErrorEvent = null):void { trace("function doXML.createDoc();"); var fileToCreate:File = File.applicationStorageDirectory; fileToCreate = fileToCreate.resolvePath("config.xml"); var fileStream:FileStream = new FileStream(); fileStream.open(fileToCreate, FileMode.WRITE); fileStream.writeUTFBytes("<?xml version=\"1.0\" encoding=\"utf-8\"?><configs><config><sound>true</sound><music>true</music><soundvalue>0.7</soundvalue><musicvalue>0.5</musicvalue><language>0</language> <!-- English 0, Russian 1 --> <progress>0</progress> </config></configs>") fileStream.close(); this.loadXML(fileToCreate.nativePath); } private function onLoadXML(e:Event):void { trace("function doXML.onLoadXML();"); xml = XML(loader.data); var xmlLoaded:Event = new Event(SETTINGS_LOADED); dispatchEvent(xmlLoaded); } public function getSettings():XML { trace("function doXML.getSettings();"); return xml; } public static function saveSettings(settings:Array):void { trace("static function doXML.saveSettings();"); } } } //Теперь код из кадра, который пользуется этим классом. //ooXML - экземпляр класса doXML; import com.game.*; import flash.filesystem.File; stop(); var path:File = File.applicationStorageDirectory; path = path.resolvePath("config.xml"); showMenu(); ooXML.loadXML(path.nativePath); ooXML.addEventListener(doXML.SETTINGS_LOADED, onSettingsLoad); function onSettingsLoad(e:Event):void { trace("function onSettingsLoad();"); settingsXML = ooXML.getSettings(); // Получаем загруженные настройки в переменную settingsXML; menu.play(); // В приложении на телефоне этого не происходит, соответственно данное событие не было получено. //Если же убрать stop(); внутри меню, то меню анимируется. Иначе нет, тоесть этот код не выполняется. settingsList = settingsXML.config; // Эта переменная типа XMLList. currentProgress = settingsList.progress; // currentProgress:int titles = null; // Удаляем из памяти заставку приложения. var theSettings:Array = [settingsList.sound, settingsList.music, settingsList.soundvalue, settingsList.musicvalue, settingsList.language, settingsList.progress]; settings.setSettings(theSettings); // Отсылаем классу Settings загруженные настройки. } function showMenu():void { menu = new Menu(); addChild(menu); menu.alpha = 0.6; Element.align(menu, "right"); menu.y = 100; // Знаю, нехорошо. } var game:Game = new Game(settings, stage); |
|
|||||
|
http://help.adobe.com/ru_RU/as3/dev/...de46-7fe4.html
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Цитата:
Я просто ранее всегда писал лишь под Flash Player, вот и умею грузить только лоудерами. Это, можно считать, мой первый проэкт под AIR, не считая простых экспериментов. Сейчас начну гуглить про загрузку FileStream'ом) |
![]() |
![]() |
Часовой пояс GMT +4, время: 15:02. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|