Как отправить несколько адресов на URLRequest - PullRequest
0 голосов
/ 18 мая 2011

Я использую сервис Weather.com XML для получения данных прогноза.Я создал экземпляр UrlLoader и передал ему полный HTTP-адрес, включая учетные данные, местоположение и другие параметры.Это очень хорошо работает в тандеме с функциональностью XML (urlLoader.data), поскольку я получаю результат для указанного идентификатора местоположения.Затем я использую E4X для отслеживания только необходимых узлов.Это все хорошо.

Сложность в том, что я должен сделать это для 19 дополнительных городов.Я сделал начальную работу в классе Main, функции Main, частной функции onXmlLoaded.Я попытался создать новую публичную функцию getCityName, создав новый URLRequest, отслеживая XML и добавляя значения в мои компоненты.Однако, когда я пытаюсь это сделать, я получаю:

Ошибка 5006. Файл ActionScript не может иметь более одного видимого извне определения.

Как легко настроить URLRequestзапросить данные для всех 20 городов и проанализировать результаты после этого?Должен ли я передать массив идентификаторов местоположений в URLRequest, потому что это единственная часть HTTP-запроса, которая отличается.Создаю ли я отдельные файлы ActionScript со своим собственным классом и функциями для каждого из 20 запросов?

Вот код:

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;

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Просто цикл.
Очевидно, изменить ссылки для ваших нужд

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 голосов
/ 18 мая 2011

Я почти уверен, что эта ошибка возникает, только если у вас есть функция, определенная за пределами вашего класса:

Например:

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

        public function correctFunction():void {
            //No error.
        }
    }
    public function errorFunction():void {
        //will throw 5006 error.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...