2011-05-17 52 views
0

我正在使用weather.com XML服務來檢索預測數據。我創建了一個UrlLoader實例,並將整個HTTP地址(包括憑證,位置和其他參數)傳遞給它。這與XML(urlLoader.data)功能協同工作得非常好,因爲我得到了指定位置ID的結果。然後我使用E4X來追蹤所需的節點。這很好。如何向URLRequest發送多元地址

棘手的部分是,我必須爲19個其他城市做到這一點。我已經完成了Main類中的初始工作,Main函數,private函數onXmlLoaded。我試着創建一個新的公共函數getCityName,使新的URLRequest,跟蹤XML並向我的組件添加值。但是,當我嘗試此操作時,我收到

錯誤5006:ActionScript文件不能具有多個外部可見的定義。

如何輕鬆設置URLRequest來請求所有20個城市的數據,然後解析結果?我是否將位置ID數組傳遞給URLRequest,因爲這是HTTP請求中唯一不同的部分。我是否爲20個查詢中的每一個創建了具有自己的類和函數的單獨的ActionScript文件?任何指導將不勝感激。

非常感謝!

編輯: 下面的代碼:

public class Main extends MovieClip 
{ 

    public function Main() 
    { 

     var urlRequest:URLRequest = new URLRequest("http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"); 
     var urlLoader:URLLoader=new URLLoader(); 

     urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded); 
     urlLoader.load(urlRequest); 
    } 
    public function onXmlLoaded(event:Event): void 
    { 
     XML.ignoreWhitespace = true; 
     var urlLoader:URLLoader = event.currentTarget as URLLoader; 
     var resultXML:XML = XML(urlLoader.data); 
     trace(resultXML.dayf.day.hi); 
     trace(resultXML.dayf.day.low); 
     trace(resultXML.dayf.day.part.(@p=="d").icon); 

     lbllowtemp.text= String(resultXML.dayf.day.low); 
     lblhitemp.text=String(resultXML.dayf.day.hi); 
     uicondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png"; 

     var tf:TextFormat = new TextFormat; 
     tf.color=0xFFFFFF; 
     tf.font="Arial"; 
     tf.size=16; 
     tf.bold=true; 
     lbllowtemp.setStyle("textFormat",tf); 
     lblhitemp.setStyle("textFormat",tf); 
     } 

    public function getCanberra() 
    { 
     var urlRequest:URLRequest = new URLRequest("http://xoap.weather.com/weather/local/ASXX023?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a"); 
     var urlLoader:URLLoader=new URLLoader(); 

     urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded); 
     urlLoader.load(urlRequest); 

     XML.ignoreWhitespace = true; 
     var urlLoader:URLLoader = event.currentTarget as URLLoader; 
     var resultXML:XML = XML(urlLoader.data); 
     trace(resultXML.dayf.day.hi); 
     trace(resultXML.dayf.day.low); 
     trace(resultXML.dayf.day.part.(@p=="d").icon); 

     lblCBlowtemp.text= String(resultXML.dayf.day.low); 
     lblCBhitemp.text=String(resultXML.dayf.day.hi); 
     uiCBcondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png"; 

     var tf:TextFormat = new TextFormat; 
     tf.color=0xFFFFFF; 
     tf.font="Arial"; 
     tf.size=16; 
     tf.bold=true; 
     lblCBlowtemp.setStyle("textFormat",tf); 
     lblCBhitemp.setStyle("textFormat",tf); 
    } 
} 

現在當我調試,我收到錯誤未定義的屬性事件的1120個接入在我getCanberra功能上線:

var urlLoader:URLLoader = event.currentTarget as URLLoader; 

回答

1

只是循環。
明顯變化鏈接爲您的需求

var weather:Weather = new Weather(); 


package {  
    public class Weather{ 
    public var aVars:Array = new Array(); 
    aVars[0] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a" 
    aVars[1] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a" 
    aVars[2] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a" 
    aVars[3] = "http://xoap.weather.com/weather/local/ASXX0274?dayf=1&link=xoap&par=1253350999&key=9a25cc224522c34a" 

    public function Weather() { 
     for(var i:int = 0; i<aVars.length; i++){ 
     var urlRequest:URLRequest=new URLRequest(aVars[i]); 
     var urlLoader:URLLoader=new URLLoader(); 
     urlLoader.addEventListener(Event.COMPLETE, onXmlLoaded); 
     urlLoader.load(urlRequest); 
     } 
    } 
    public function onXmlLoaded(event:Event):void { 
     XML.ignoreWhitespace=true; 
     var urlLoader:URLLoader=event.currentTarget as URLLoader; 
     var resultXML:XML=XML(urlLoader.data); 
     trace(resultXML.dayf.day.hi); 
     trace(resultXML.dayf.day.low); 
     trace(resultXML.dayf.day.part.(@p=="d").icon); 

     lbllowtemp.text=String(resultXML.dayf.day.low); 
     lblhitemp.text=String(resultXML.dayf.day.hi); 
     uicondicon.source=String(resultXML.dayf.day.part.(@p=="d").icon)+".png"; 


     // note that tf has not been added to the display list so will not be visible 
     var tf:TextFormat=new TextFormat ; 
     tf.color=0xFFFFFF; 
     tf.font="Arial"; 
     tf.size=16; 
     tf.bold=true; 
     lbllowtemp.setStyle("textFormat",tf); 
     lblhitemp.setStyle("textFormat",tf); 
    } 

    } 
} 
+0

感謝通過URL的數組循環尖端。我應該如何將resultXML分配給特定的標籤控件?例如,我將爲堪培拉添加cblbllowtemp,cblblhitemp,cbuicondicon,並將爲其他城市添加此功能。或者,有沒有更適合將正確的軌跡分配給正確標籤的方法? – SidC 2011-05-18 17:55:53

+0

最快的方法是將cblbllowtemp,cblblhitemp,cbuicondicon作爲參數傳遞給構造函數,但這通常是不被接受的。另一種方法可以使用setter和getter方法來分配它們。無論哪種方式都會起作用,因爲這會給課程提供對這些對象的引用。 – 2011-05-18 18:39:55

+0

你能給我一個使用getter/setter方法分配它們的語法示例嗎?另外,在擴展MovieClip的Main類中使用上面的示例時,我收到錯誤1120訪問未定義屬性aVars。我已經在我的公共函數Weather之前定義了這些,就像在代碼片段中顯示的一樣。我該如何解決? – SidC 2011-05-18 20:58:21

0

我很確定這個錯誤只發生在如果你的功能定義在你的班級之外:

例如:

package {  
    public class YourClass { 
     public function YourClass() { 
      //Constructor 
     } 

     public function correctFunction():void { 
      //No error. 
     } 
    } 
    public function errorFunction():void { 
     //will throw 5006 error. 
    } 
}