Comunidad de diseño web y desarrollo en internet online

Control de errores globales en Adobe AIR 2.0

En muchas ocasiones cuando trabajamos con aplicaciones pueden aparecer errores no controlados o inesperados, que muchas veces podemos controlar, pero otras fueron realmente imprevistos. Para eso la nueva versión de Adobe AIR implementa un controlador de errores globales (usando AIR 2.0 y FlashPlayer 10.1), con lo cual NO QUIERE DECIR que, nosotros, los desarrolladores no prestemos importancia al control de errores, sino que será una previsión en caso de no entender porque existió un error desconocido. Por ejemplo, podemos usar la clase UncaughtErrorEvent para detectar un error imprevisto y este ser enviado vía email o al servidor para que nosotros lo solucionemos.


Para empezar, como en los demás tips que escribí, usaremos Flash Builder y el SDK de AIR 2.0.

Primero crearemos la interfaz, un botón que obligue al error y un textArea que nos muestre los mensajes:

Código :

<s:Button id="btn" label="Disparar Error" 
           click="viewError(event)"
           horizontalCenter="0" top="10"/>
<s:TextArea  id="txtResp"
           horizontalCenter="0" top="40" width="80%" height="160"
           verticalAlign="top" textAlign="left" color="#FF0000"/>


Ahora utilizaremos la clase UncaughtErrorEvent que nos permite controlar los errores globales.

Código :

loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, captureError );


Cabe resaltar que podemos controlar errores del propio main de la aplicación, así como otros generados desde swf externos utilizando:
  • LoaderInfo.uncaughtErrorEvents
  • Loader.uncaughtErrorEvents
Estos deben ser escuchados desde el SWF principal ;)

Siguiendo con el ejemplo, nuestro botón llamará a una función que nos genere el error:

Código :

private function viewError(e:Event):void{
   var foo:String = null;
   trace(foo.length);
}


Este error será escuchado por el evento UncaughtErrorEvent y ejecutará nuestra función captureError:

Código :

private function captureError(e:UncaughtErrorEvent):void{
   txtResp.text = "CaptureError";
   if (e.error is Error){
      var error:Error = e.error as Error;
      txtResp.text +=   "\n\nError ID: " + error.errorID + 
                        "\n\nError Name: " + error.name + 
                        "\n\nError Message:\n" + error.message
   }else{
      var errorEvent:ErrorEvent = e.error as ErrorEvent;
      txtResp.text += "\n" + errorEvent.errorID
   }
}

Es una gran ventaja el uso de esta clase, ya que nos permite no sólo poder conocer, vía email por ejemplo, de algún error inesperado, sino que podemos decidir si la aplicación puede o no continuar, ya que muchas veces estos errores impiden el flujo normal de la aplicación.

El código completo está aquí:

Código :

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                  xmlns:s="library://ns.adobe.com/flex/spark" 
                  xmlns:mx="library://ns.adobe.com/flex/mx" 
                  applicationComplete="init()"
                  width="200" height="230">
   
   <fx:Script>
      <![CDATA[
      
         private function init():void{
            loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, captureError );
         }
         
         private function captureError(e:UncaughtErrorEvent):void{
            txtResp.text = "CaptureError";
            if (e.error is Error){
               var error:Error = e.error as Error;
               txtResp.text +=   "\n\nError ID: " + error.errorID + 
                           "\n\nError Name: " + error.name + 
                           "\n\nError Message:\n" + error.message
            }else{
               var errorEvent:ErrorEvent = e.error as ErrorEvent;
               txtResp.text += "\n" + errorEvent.errorID
            }
         }
         
         private function viewError(e:Event):void{
            var foo:String = null;
            trace(foo.length);
         }
         
      ]]>
   </fx:Script>
   
   
   <s:Button id="btn" label="Disparar Error" 
           click="viewError(event)"
           horizontalCenter="0" top="10"/>
   <s:TextArea  id="txtResp"
           horizontalCenter="0" top="40" width="80%" height="160"
           verticalAlign="top" textAlign="left" color="#FF0000"/>
   
</s:WindowedApplication>


Puedes descargar aquí el ejemplo.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate