|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Как вытащить XML из другого файла...?
Пробую научиться получать адреса файлов для загрузки в галерею из XML файла.
Написал тестовую программку, а она не работает. Когда смотрю через trace то вижу, что класс Zagruzki_XML отрабатывает правильно, а когда я его вызываю в корневом файле test_zgr_XML.fla то ничего не получается хотя на переменную из класса Zagruzki_XML он не ругается и судя по всему он её видит. Помогите разобраться. Корневой файл : package { import flash.display.*; import flash.net.*; import flash.events.*; public class Test_zgr_XML extends Sprite { var adres_fayla:String = new String; var kilkist:Zagruzki_XML; public function Test_zgr_XML() { kilkist = new Zagruzki_XML(this); trace("adres_fayla =", adres_fayla); // проверяю чистая ли переменная (P.S. естественно чистая) adres_fayla = kilkist.adresa[0]; // загружаю в перемннную строку из XML документа прочитанного классом Zagruzki_XML trace("adres_fayla =", adres_fayla); // проверяю что теперь в переменной (P.S. увы null, хотя я надеялся увидить "img_test/1.swf" ) } } } package { import flash.display.*; import flash.events.*; import flash.net.*; public class Zagruzki_XML extends Sprite { var xml_Doc:XML; var dokument_XML:URLLoader; var adresa:Array = new Array(); var itogo:int = new int; var fayl_naznachenia:Test_zgr_XML; public function Zagruzki_XML(fayl_naznachenia:Test_zgr_XML) { this.fayl_naznachenia = fayl_naznachenia; var zagruzka_iz_fayla:URLRequest = new URLRequest("test_fayl.xml"); dokument_XML = new URLLoader(); dokument_XML.addEventListener(Event.COMPLETE, full_Zavantagenia); dokument_XML.load(zagruzka_iz_fayla); } private function full_Zavantagenia(event:Event) { xml_Doc = new XML(dokument_XML.data); for each (var schitat:XML in xml_Doc.*) // считаю количество записей в XML документе { adresa[itogo] = xml_Doc.img[itogo]; trace( "adressa[itogo] =", adresa[itogo]); // показываю каждую запись itogo++; } trace( "itogo =", itogo); // показываю сколько записей в XML документе } } } исходники Последний раз редактировалось p0okm; 16.10.2009 в 17:36. |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Подскажите хоть в каком направлении искать!
|
|
|||||
strange mood
|
Читать про асинхронные события.
Вкратце - вы запускаете загрузку xml и рассчитываете тут же получить результат. А в нашей суровой реальности файл будет загружен гораздо позже, чем отработает блок кода, который вызывает load. C данными можно будет работать после того, как наступит Event.COMPLETE
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Необходимо время, чтобы ваш XML загрузился, необходимо вешать листенер. Это можно было понять, даже посмотрев на output. Трэйсы класса Test_zgr_XML выведуться раньше, чем трэйсы Zagruzki_XML класса.
Зачем вы так извращаетесь с именами перменных и классов? Они же вам ничего плохого не сделали! |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Спасибо за подсказку, правда прогуглив всё что мог нашёл пару малоинформативных слов про "асинхронные операции" в Адобовском хелпе и практически всё.
Пробовал после ставить цикл while ожидая выхода по завершению фактической загрузки, но тогда просто программка зависала. Кстати присутствует в коде, или может его нужно слушать в вызывающем классе? |
|
|||||
strange mood
|
Про ожидание циклом забудьте.
Всё верно, данные становятся доступными, когда вызывается full_Zavantagenia. Соответственно из этой функции уже следует выполнять дальнейшие действия. На самом деле нет никакого смысла писать отдельный класс для загрузки XML, для этого и был написан флэшовый URLLoader. Переносите код из Zagruzki_XML в главный класс, и будет вам счастье.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
Регистрация: May 2009
Сообщений: 34
|
Продолжая попытки справится с этой загрузкой XML пришёл к такому вот варианту,
Тупо вставил таймер и после задержки получил ожидаемый результат: package { import flash.display.*; import flash.net.*; import flash.events.*; import flash.utils.Timer; public class Test_zgr_XML extends Sprite { var adres_fayla:String = new String; var kilkist:Zagruzki_XML; public function Test_zgr_XML() { kilkist = new Zagruzki_XML(this); var zadergka:Timer = new Timer(500, 1); zadergka.addEventListener(TimerEvent.TIMER, timer_1); zadergka.start(); } private function timer_1 (event:TimerEvent):void { adres_fayla = kilkist.adresa[kilkist.itogo - 1]; trace("adres_fayla =", adres_fayla); } } } private function timer_1 (event:TimerEvent):void { adres_fayla = kilkist.adresa[kilkist.itogo - 1]; trace("adres_fayla =", adres_fayla); var image:Loader = new Loader(); image.load( new URLRequest(adres_fayla)); addChild(image); trace("adres_fayla2 =", adres_fayla); } itogo = 3 adres_fayla = "img_test/tretiy.swf" adres_fayla2 = "img_test/tretiy.swf" Error #2044: Необработанный IOErrorEvent:. text=Error #2035: URL-адрес не обнаружен. package { import flash.display.*; import flash.net.*; import flash.events.*; import flash.utils.Timer; public class Test_zgr_XML extends Sprite { var adres_fayla:String = new String; var image:Loader = new Loader(); var kilkist:Zagruzki_XML; public function Test_zgr_XML() { kilkist = new Zagruzki_XML(this); var zadergka:Timer = new Timer(500, 1); zadergka.addEventListener(TimerEvent.TIMER, timer_1); zadergka.start(); } private function timer_1 (event:TimerEvent):void { adres_fayla = kilkist.adresa[kilkist.itogo - 1]; trace("adres_fayla =", adres_fayla); image.load( new URLRequest(adres_fayla)); var zadergka2:Timer = new Timer(500, 1); zadergka2.addEventListener(TimerEvent.TIMER, timer_2); zadergka2.start(); } private function timer_2 (event:TimerEvent):void { addChild(image); trace("adres_fayla2 =", adres_fayla); } } } itogo = 3 adres_fayla = "img_test/tretiy.swf" Error #2044: Необработанный IOErrorEvent:. text=Error #2035: URL-адрес не обнаружен. adres_fayla2 = "img_test/tretiy.swf" на adres_fayla = "img_test/tretiy.swf"; Всё работает даже без применения задержки. Нитчего не понимаю Почему так получается? Добавлено через 12 часов 57 минут С проблемой пути разобрался, в XML нужно было путь писать не в кавычках. А вот как обойтись без искуственной задержки в виде TimerEvent.TIMER пока не знаю. |
Часовой пояс GMT +4, время: 20:06. |
|
« Предыдущая тема | Следующая тема » |
|
|