2012-07-24 89 views
0

我正在使用Adobe AIR 3.3(适用于iOS)的Flash CS6中工作,并无法将XML字符串返回给textField。AS3 Adob​​e AIR:返回xml字符串

它正在追踪正确的信息,我试过几种方式来返回跟踪,但似乎无法得到它...这是我最近的尝试。有什么建议么?提前致谢。

var myLoader:URLLoader = new URLLoader(); 
myLoader.load(new URLRequest("http://www.someURL.php")); 
//php file that echos xml 
myLoader.addEventListener(Event.COMPLETE, init); 
    var fadedText:TextField; 
    var touchList:TouchList; 
    var textOutput:TextField; 
    var animateLeft:Tween; 
    var listArray:Array; 
    var item:TouchListItemRenderer; 
    var theXML:XML; 
    var days:Array = new Array("monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"); 
    var daySelected; 
    var businessNameArray:Array = new Array(); 
    var businessLogoArray:Array = new Array(); 
    var businessAddress:Array = new Array(); 
    var distanceArrayDisplay:Array = new Array(); 
    var distanceArrayCount = 0; 

    function init(e:Event = null):void 
    { 
     trace(myLoader.data); 
     theXML = new XML(e.target.data); 
     theXML.ignoreWhitespace = true; 
     myLoader.close(); 


     // add our list and listener 
     var itemSizeCalculator = stage.stageHeight/6; 
     touchList = new TouchList(stage.stageWidth, stage.stageHeight-itemSizeCalculator); 
     touchList.addEventListener(ListItemEvent.ITEM_SELECTED, handlelistItemSelected); 
     addChild(touchList); 
     touchList.x = stage.stageWidth; 


     // Fill our list with item rendreres that extend ITouchListRenderer. 
       for(var i:int = 0; i < theXML.food.length(); i++) { 
        if(theXML.food[i].monday != "un") 
        {       
       item = new TouchListItemRenderer(); 
       item.index = i; 
       item.data = theXML.food[i].business; 
       item.name = theXML.food[i].business; 
       item.addEventListener(MouseEvent.CLICK, itemWasClicked); 
       item.itemHeight = itemSizeCalculator; 

    businessNameArray[i]= theXML.food[i].business; 
    businessLogoArray[i]=("http://www.logosURL.com/"+theXML.food[i].logo); 
    businessAddress[i]= theXML.food[i].address; 


      var fadedTextFormat:TextFormat = new TextFormat(); 
      fadedTextFormat.bold = true; 
      fadedTextFormat.color = 0x999999; 
      fadedTextFormat.size = 14; 
      fadedTextFormat.font = "Helvetica"; 

      fadedText = new TextField(); 
      fadedText.height = 30; 
      fadedText.mouseEnabled = false; 
      fadedText.defaultTextFormat = fadedTextFormat; 

      item.addChild(fadedText); 
      fadedText.x = 75; 
      fadedText.y = 10; 
      distanceArrayDisplay.push(fadedText); 

       var distanceLoader:URLLoader = new URLLoader(); 
       distanceLoader.load(new URLRequest("http://maps.googleapis.com&origins=someAddress&destinations="+businessAddress[i]+"&mode=walking&language=en-en&sensor=false")); 
       distanceLoader.addEventListener(Event.COMPLETE, distanceCalculated); 


       var logoLoader:Loader = new Loader(); 
       item.addChild(logoLoader); 
       var logoURL:URLRequest = new URLRequest("http://www.myLogos.com/"+theXML.food[i].logo); 
       logoLoader.load(logoURL); 
       logoLoader.scaleX = .4; 
       logoLoader.scaleY = .4; 
       logoLoader.y = logoLoader.y + 5; 
       logoLoader.mouseEnabled = false; 
       var arrowGraphic:rightArrow = new rightArrow(); 
       item.addChild(arrowGraphic); 
       arrowGraphic.x = stage.stageWidth - 5; 
       arrowGraphic.y = item.height/2; 

      touchList.addListItem(item); 
        } 
     } 
} 


function distanceCalculated(e:Event) 
{ 
// trace(e.currentTarget.data); 
var distanceXML:XML = new XML(e.target.data); 
distanceXML.ignoreWhitespace = true; 
var returnVar:String = (distanceXML.row.element.distance.text); 
distanceArrayDisplay[distanceArrayCount].text = returnVar; 
trace(returnVar); 

distanceArrayCount++; 
} 
+0

请在您的第一个问题中尝试提供您想要/需要的所有信息。如果我们不确切地知道你正在尝试的是什么,并且连续编辑的答案是浪费所有人的时间,那么很难帮助你 – danii 2012-07-24 19:48:19

+0

你试过xml.toXMLString()吗? (严重) – ansiart 2012-07-25 19:11:20

回答

0

我猜你是正确读取第一个XML,而XML具有要加载,然后显示从那些TextField的一些信息的URL列表。在不知道XML的结构的情况下,我不能建议你任何工作代码,但我可以指出你正确的方向。有关闪存AS3读/迭代XML的详细信息,请参阅:http://www.kirupa.com/developer/flashcs3/using_xml_as3_pg1.htm

//iterator var 
var xml_read:uint=0; 
//array of textfields for reference 
var array_textFields:Array; 

//config XML complete 
function init(e:Event = null):void 
{ 

    array_textFields = new Array(); 

    theXML = new XML(e.target.data); 
    theXML.ignoreWhitespace = true; 

    //this depends on the XML structure, please look at the article I linked 
    //for more info on how to iterate an XML 
    var i:uint=0; 
    for(someUrl in theXML..url) 
    { 
    var fadedText:TextField = new TextField(); 

    //you should place each Textfield on different coord, otherwise 
    //they will all stack on top of each other and you will only see one 
    //for example: 
    fadedText.y = (fadedText.height+10)*i; 
    item.addChild(fadedText); 
    array_textFields.push(fadedText); 

    var distanceLoader:URLLoader = new URLLoader(); 
    distanceLoader.load(new URLRequest(someUrl)); 
    distanceLoader.addEventListener(Event.COMPLETE, distanceCalculated); 

    i++; 

    } 
} 
function distanceCalculated(e:Event):void 
{ 

    var distanceXML:XML = new XML(e.target.data); 
    distanceXML.ignoreWhitespace = true; 

    //retrieve information 
    var returnVar:String = (distanceXML.row.element.distance.text); 

    //set to textfield 
    TextField(array_textFields[xml_read]) = returnVar; 

    //increase iterator 
    xml_read++; 
} 

请记住,在ActionScript3中,所有的网络I/O是异步。通常,EventListener函数不会返回任何值,因为您不知道数据何时准备就绪。当你异步调用EventListener函数时,你要做的就是存储一个你想要数据到哪里去的引用(在你的情况下是一个TextField变量)。

+0

这工作,但我想通过一个循环添加多个“fadedText”字段。您建议的方式有效,但仅限于一种情况。 – user1129107 2012-07-24 18:52:15

+0

那么,你没有提到任何关于多个TextFields或循环你的问题。如果需要,我建议的代码可以很容易地用于多个实例,但我需要更多关于您准确完成的任务的信息。 – danii 2012-07-24 19:05:32

+0

对不起 - “只有在您进行同行评审之前,此编辑才会显示给您。”等待... – user1129107 2012-07-24 19:27:08