Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка сохранения данных из xml в массив (http://www.flasher.ru/forum/showthread.php?t=164261)

argoniummm 15.08.2011 07:00

Ошибка сохранения данных из xml в массив
 
Код AS3:

{
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class App extends MovieClip
{
var myXML:XML;
var XML_URL:String = "http://vk-life.com/data.xml";
var myLoader:URLLoader = new URLLoader();
var img:Array = [];
var question:Array = [];
var answer:Array = [];
var answer_img:Array = [];
var position = 0;
 
public function App()
{
 myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 myLoader.load(new URLRequest(XML_URL));
 SetQuestion();
}
 
public function xmlLoaded(event:Event):void
{
 myXML = new XML(myLoader.data);
 for each (var element:XML in myXML.elements())
 {
  if (element.name() == "img")
  {
  for each (var imggg:XML in element.elements())
  {
    img.push(imggg.toString());
  }
  }
 
  if (element.name() == "question")
  {
  for each (var questionnn:XML in element.elements())
  {
    question.push(questionnn.toString);
  }
  }
 
  if (element.name() == "answer")
  {
  for each (var answerrr:XML in element.elements())
  {
    answer.push(answerrr.toString());
  }
  }
 
 
  if (element.name() == "answer_img")
  {
  for each (var answer_imggg:XML in element.elements())
  {
    answer_img.push(answer_imggg.toString());
  }
  }
 
 }
}
 
public function SetQuestion ()
{
 question_txt.text = answer[position];
}
 
}
 
}

Данные флеш получает но почему то не хочет сохранять их в массив (получение данных я проверял так:
Код AS3:

 if (element.name() == "question")
  {
  for each (var questionnn:XML in element.elements())
  {
    question.push(questionnn.toString);
    trace(question.push(questionnn.toString));
  }
  }


MrPoma 15.08.2011 07:22

Попробуйте сделать современно:
Код AS3:

myXML = new XML(myLoader.data);
var img_elements:XMLList = myXML..img;
for each (var img:XML in img_elements){
  img.push(img.toXMLString());
}

Возможно, это из-за того, что вы используете toString instead of toXMLString.

argoniummm 15.08.2011 07:27

Всё равно не работает. Кстати забыл, вот структура xml:
Код:

<data>
<img>
<img0>img0</img0>
<img1>img1</img1>
</img>
<question>
<question0>question0</question0>
<question1>question1</question1>
</question>
<answer>
<answer0>answer0</answer0>
<answer1>answer1</answer1>
</answer>
<answer_img>
<answer_img0>answer_img0</answer_img0>
<answer_img1>answer_img1</answer_img1>
</answer_img>
</data>


kackbip 15.08.2011 08:27

Зачем вам xml если вы не соблюдаете иерархию?
Код:

<items>
  <item id="0">
      <image><image>
      <question></question>
      <answer></answer>
      <answer_image></answer_image>
  </item>
  <item id="1">
      <image><image>
      <question></question>
      <answer></answer>
      <answer_image></answer_image>
  </item>
  <item id="2">
      <image><image>
      <question></question>
      <answer></answer>
      <answer_image></answer_image>
  </item>
</items>


argoniummm 15.08.2011 08:53

А в чём у меня ошибка то? Почему он получает данные но не сохранят их в массив?

kackbip 15.08.2011 09:49

1) Очень неудобочитаемый код из-за того что вы воспользовались неудобным инструментом для работы с xml.
Вот как лучше с xml работать:
http://help.adobe.com/ru_RU/ActionSc...0204-7e72.html
2) Названия переменных, которые ничего не говорят об их предназначении.
3) Как вы определили, что данные в массив не сохраняются? Я вижу, что вы проверили получение данных, а где вы проверили, есть ли данные в массиве? Должны строки записываться в массив. Похоже проблема где-то в другом месте.

silin 15.08.2011 11:36

questionnn.toString это совсем не то, что видимо ожидается
попробуй questionnn.toString()

Добавлено через 28 минут
да и присоединяюсь к высказавшимся,
Код AS3:

if (element.name() == "img")

выглядит диковато для E4X
вот так яснее будет, не?
Код AS3:

var element:String;
myXML = new XML(myLoader.data);
 
 
for each(element in myXML.img.*)
{
        img.push(element);
}
 
for each(element in myXML.question.*)
{
        question.push(element);
}
// и т.д.


argoniummm 15.08.2011 12:57

Хм... У меня появилась ещё 1 проблема:
Вот весь класс, да я знаю что многое написано не рационально.
Код AS3:

package 
{
        import flash.display.*;
        import flash.desktop.*;
        import flash.events.*;
        import flash.net.*;
        import flash.text.*;
        import flash.xml.*;
 
        public class App extends MovieClip
        {
                var myXML:XML;
                var XML_URL:String = "http://vk-life.com/data.xml";
                var myLoader:URLLoader = new URLLoader();
                var img:Array = [];
                var question:Array = [];
                var answer:Array = [];
                var answer_img:Array = [];
                var position:int = 0;
 
                var number:int = 0;
                var my_answer:Array = [];
 
                var x_centre = 566;
                var y_centre = 256;
                var size = 15;
 
                public function App()
                {
                        myLoader.addEventListener(Event.COMPLETE, xmlLoaded);
                        myLoader.load(new URLRequest(XML_URL));
                        SetQuestion();
                        //stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
                        exit_btn.addEventListener(MouseEvent.CLICK, Exit);
                }
 
                public function xmlLoaded(event:Event):void
                {
                        var element:String;
                        myXML = new XML(myLoader.data);
 
                        for each (element in myXML.img.*)
                        {
                                img.push(element);
                        }
 
                        for each (element in myXML.question.*)
                        {
                                question.push(element);
                        }
 
                        for each (element in myXML.answer.*)
                        {
                                answer.push(element);
                        }
 
                        for each (element in myXML.answer_img.*)
                        {
                                answer_img.push(element);
                        }
 
                }
 
                public function processXML()
                {
                        var image_question:MovieClip = new MovieClip();
                        var imageLoader = new Loader();
                        image_question.addChild(imageLoader);
                        imageHolder.mouseChildren = false;
                        imageLoader.x = 0;
                        imageLoader.y = 0;
                        imageLoader.load(new URLRequest(img[k]));
                        addChild(image_question);
 
                }
 
                public function SetQuestion()
                {
                        question_txt.text = answer[position];
                }
 
                public function Exit(event:Event):void
                {
                        // getURL("javascript: closeTaskWindow("")");
                }
 
 
                /* private function keyUpHandler(event:KeyboardEvent):void
                {
                        trace(event.keyCode);
 
                        if (event.keyCode == 65)
                        {
                                my_answer.push("ф");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 66)
                        {
                                my_answer.push("и");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 67)
                        {
                                my_answer.push("с");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 68)
                        {
                                my_answer.push("в");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 69)
                        {
                                my_answer.push("у");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 70)
                        {
                                my_answer.push("а");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 71)
                        {
                                my_answer.push("п");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 72)
                        {
                                my_answer.push("р");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 73)
                        {
                                my_answer.push("ш");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 74)
                        {
                                my_answer.push("о");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 75)
                        {
                                my_answer.push("л");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 76)
                        {
                                my_answer.push("д");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 77)
                        {
                                my_answer.push("ь");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 78)
                        {
                                my_answer.push("т");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 79)
                        {
                                my_answer.push("щ");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 80)
                        {
                                my_answer.push("з");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 81)
                        {
                                my_answer.push("й");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 82)
                        {
                                my_answer.push("к");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 83)
                        {
                                my_answer.push("ы");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 84)
                        {
                                my_answer.push("е");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 85)
                        {
                                my_answer.push("г");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 86)
                        {
                                my_answer.push("м");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 87)
                        {
                                my_answer.push("ц");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 88)
                        {
                                my_answer.push("ч");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 89)
                        {
                                my_answer.push("н");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 90)
                        {
                                my_answer.push("я");
                                number = number + 1;
 
                        }
                        if (event.keyCode == 186)
                        {
                                my_answer.push("ж");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 222)
                        {
                                my_answer.push("э");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 188)
                        {
                                my_answer.push("б");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 190)
                        {
                                my_answer.push("ю");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 219)
                        {
                                my_answer.push("х");
                                number = number + 1;
 
                        }
 
                        if (event.keyCode == 221)
                        {
                                my_answer.push("ъ");
                                number = number + 1;
 
                        }
                }
 
 
        }
 
}

Вот такие ошибки:
D:\загадки\App.as, строка 6 1152: Конфликт с наследуемым определением flash.events:EventDispatcher.toString в пространстве имен public.
ComponentShim (скомпилированный фрагмент), строка 1 5000: В класс "fl.core.ComponentShim" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
ComponentShim (скомпилированный фрагмент), строка 1 5000: В класс "fl.controls.Label" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
ComponentShim (скомпилированный фрагмент), строка 1 5000: В класс "fl.controls.TextArea" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
ComponentShim (скомпилированный фрагмент), строка 1 5000: В класс "fl.controls.TextInput" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.
ComponentShim (скомпилированный фрагмент), строка 1 5000: В класс "fl.controls.UIScrollBar" должен входить подкласс "flash.display.MovieClip", так как он связывается с символом такого же типа в библиотеке.

silin 15.08.2011 13:35

конкретно помочь тут нечем
похоже, что источники этих ошибок из-за бардака с объектами\компонентами, которые положены на таймлайн вручную и для которых IDE, генерит свои объявления и т.п.
надо наводить порядок в fla, отключить automatically declare stage instances в настройкаах, объявить их явно в классе, тогда возможно станет понятнее

argoniummm 15.08.2011 13:55

Хм... Я не понимаю это... Можете помочь если я выложу исходники: Просто я сижу уже пару часов и не могу понять... http://***********/25196115


Часовой пояс GMT +4, время: 10:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.