Comunidad de diseño web y desarrollo en internet online

Capturar error de URLLoader

Citar            
MensajeEscrito el 09 Sep 2010 10:14 am
Hola a todos!, a ver si me podeis ayudar con este problema, pues estoy atrancado.

Tengo este código:

Código ActionScript :

public function leeXML():void{
      
   var url:String = ".... ruta a un archivo XML  ...";
   
   var loader:URLLoader;   
   try{
      loader = new URLLoader();
      loader.addEventListener(Event.COMPLETE, xmlCompleto);
      loader.addEventListener(ErrorEvent.ERROR , xmlErr);
      var peticion:URLRequest = new URLRequest(url);
      loader.load(peticion);
   }catch(e:Error){
      depura("Error: "+e);
      Alert.show("Error: "+e);
   }
   
   
}

public function xmlErr(e:Event):void{   
      depura("xmlError: "+e.toString());
      Alert.show("Error: "+e.toString());
}


cuando no encuentra un archivo XML, me da este error:

Código ActionScript :

Error #2044: ioError no controlado: text=Error #2032: Error de secuencia. URL: http://localhost/xxxxxxxxxx.xml
   at xxx/leeXML()[Xml.as:50]   
   at flash.events::EventDispatcher/dispatchEventFunction()
   at flash.events::EventDispatcher/dispatchEvent()
   at flash.net::URLLoader/onComplete()


La línea 50 es esta: loader = new URLLoader();

El problema es que me gustaría capturar el error de cuando no se encuentra un archivo xml, para mostrar un mensaje al usuario, pero no veo la forma de hacerlo... ¿alguna idea?

GRACIAS.

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 09 Sep 2010 12:55 pm
Hola,
tienes que usar errores de entrada-salida. Prueba a cambiar "ErrorEvent.ERROR" por "IOErrorEvent.IO_ERROR". Además como este tipo de operaciones son asíncronas no hace falta que lo metas dentro de un bloque try-catch.

PD: Es mejor que las funciones CallBack de los listener sean private.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2010 08:00 am
gracias isidoro, ahora si me funciona perfectamente!.

Por cierto, solo por curiosidad, ¿que quiere decir que" este tipo de operaciones son asíncronas" ?
En realidad le había puesto el try/catch solo para probar algo más..

saludos!

Por rau1sfx

26 de clabLevel



 

aqui

firefox
Citar            
MensajeEscrito el 10 Sep 2010 11:30 am
Bueno, a ver si me se explicar:

- Operaciones síncronas: El código que escribes se ejecuta línea a línea; hasta que no se ha acabado de ejecutar una orden no se ejecuta la siguiente. Por ejemplo, si la carga usando un loader fuese síncrona tu código detendría la ejecución al llegar a la línea loader.load(...), y hasta que no se completase la carga no ejecutaría la orden siguiente. En este caso sí que sería de utilidad un bloque try-catch, ya que si por cualquier motivo no se encuentra el archivo a cargar si no lo usas tu programa quedaría detenido indefinidamente, mientras que con él puedes gestionar qué hacer en caso de errores.

- Operaciones asíncronas: Al llegar a la línea loader.load(...) se inicia la carga del archivo, pero el código no se detiene, sino que continúa en la línea siguiente. En estos casos añadimos los listener al loader, y les asignamos los Callback, y por eso tenemos que acceder al objeto cargado dentro de ellos. La ventaja de este tipo de operaciones es que el programa puede continuar la ejecución aunque los assets que uses no estén todavía cargados (piensa por ejemplo en cómo funciona cualquier galería de imágenes hecha en AS).

Es decir:
La ventaja de las operaciones síncronas es que en la línea inmediatamente siguiente a la de carga ya podemos acceder al objeto cargado, ya que hasta que no se carga completamente no se pasa a la siguiente línea; y la desventaja es que mientras dure el proceso de carga el programa quedará bloqueado.
Mientras que en una operación asíncrona durante el proceso de carga no perdemos el control sobre el programa (esto mejora infinitamente la experiencia del usuario), pero tenemos que tener cuidado de no intentar acceder al objeto hasta que no se haya cargado completamente y por eso el código necesario para estas operaciones es un poco más complicado de escribir y entender.

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2010 11:43 am

isidoro escribió:

pero tenemos que tener cuidado de no intentar acceder al objeto hasta que no se haya cargado completamente y por eso el código necesario para estas operaciones es un poco más complicado de escribir y entender.


gracias de nuevo isidoro, te has explicado perfectamente ;D

Recuerdo que cuando empecé con AS3 perdí bastante tiempo con este tema, pues daba por sentado en mi código que los objetos ya estaban cargados, y como bien dices, al tratar de acceder a ellos todavía no estaban disponibles. La teoría es fácil, pero cuando tienes un código complicado no resulta tan fácil de encontrar estos fallos...

saludos!

Por rau1sfx

26 de clabLevel



 

aqui

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.