2012-07-24 84 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