También podemos definir bloques de gestión de eventos, ya sea cuando finaliza una lectura o simplemente cuando se genera una excepción.
En este caso tenemos el código de ejemplo en https://github.com/pinguytaz/extAppInventor/blob/main/Ejemplos/src/losejemplos/Eventos.java en donde hemos creado una función que va sumando y cuando esta llega a 5 lanza el evento, que sera una función con la anotación @SimpleEvent que no tiene parámetros especiales ya que son los de siempre: description que tendrá la descripción como siempre y userVisible a true aunque ese es el valor por defecto.
La función evento podrá tener los parámetros que creamos oportunos pero no retorna ningún valor y lo que si deberá tener es una llamada a EventDispatcher.dispatchEvent para lanzar el evento, esta llamada tendra los siguientes parametros:
- El componente que sera «this» para saber donde esta lanzando el evento
- Cadena con el nombre del evento, que es el nombre de la función creada. Cuidado si ponemos otro distinto no tendremos error pero no lo capturaremos.
- Parámetros que darán información.
@SimpleEvent(description = "Evento que se dispara si Llega a 5 la suma")
public void Llego(String texto) {
... Código antes de despachar el evento ...
EventDispatcher.dispatchEvent(this, "Llego", texto); //Despacha evento con los datos que le llegan
.. código después de despacharlos
}
Esto es muy útil en operaciones por ejemplo de lectura de un fichero, o el contenido de una tarjeta NFC de forma que cuando lo ha leido al completo se lanza el evento y ya podemos empezar a procesar la información.
Pero podemos utilizar los eventos, junto a «try{..}catch()«, para capturar excepciones y evitar pantallas de error en tiempo de ejecución y abortar la aplicación pues a veces se pueden intentar reparar.
podemos ver un evento que se genera cuando se produce una excepción, en este caso la división por cero.
Por ejemplo en una división por cero como podemos ver en el ejemplo, lo que hacemos es capturar la excepción y lanzar un evento que gestionaremos para dar avisos mas sencillo o resolverlos.
La captura de la excepción se realizara como siempre en java con «try{ .. } catch(Exception e) { …}» y dentro de catch llamaremos a la funcón que lanza el evento, en nuestro caso «OcurreUnError» con la anotación @SimpleEvent .
public int Divide(int numero1, int numero2) {
int resultado = 1966;
try {
resultado = numero1 / numero2;
} catch(Exception e) { OcurreUnError(e.getMessage(),9 ); } // Da el mensaje de erro y un código de error.
return resultado;
}
@SimpleEvent(description = "Evento que se dispara si ocurre un error")
public void OcurreUnError(String error, int codError) { ........ No olvidar EventDispatcher.dispatchEvent .. }