{"id":1153,"date":"2024-10-09T13:55:00","date_gmt":"2024-10-09T11:55:00","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=1153"},"modified":"2024-09-10T02:11:38","modified_gmt":"2024-09-10T00:11:38","slug":"crear-extensiones-para-appinventor-eventos-6","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2024\/10\/09\/crear-extensiones-para-appinventor-eventos-6\/","title":{"rendered":"Crear extensiones para AppInventor (eventos) 6"},"content":{"rendered":"\n<p>Tambi\u00e9n podemos definir bloques de gesti\u00f3n de eventos, ya sea cuando finaliza una lectura o simplemente cuando se genera una excepci\u00f3n.<\/p>\n\n\n\n<p>En este caso tenemos el c\u00f3digo de ejemplo en <a href=\"https:\/\/github.com\/pinguytaz\/extAppInventor\/blob\/main\/Ejemplos\/src\/losejemplos\/Eventos.java\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/pinguytaz\/extAppInventor\/blob\/main\/Ejemplos\/src\/losejemplos\/Eventos.java <\/a> en donde hemos creado una funci\u00f3n que va sumando y cuando esta llega a 5 lanza el evento, que sera una funci\u00f3n con la anotaci\u00f3n <strong>@SimpleEvent<\/strong> que no tiene par\u00e1metros especiales ya que son los de siempre: <strong>description<\/strong> que tendr\u00e1 la descripci\u00f3n como siempre y <strong>userVisible<\/strong> a <em>true<\/em> aunque ese es el valor por defecto.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"509\" height=\"118\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-12.png\" alt=\"\" class=\"wp-image-1168\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-12.png 509w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-12-300x70.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/figure>\n\n\n\n<p>La funci\u00f3n evento podr\u00e1 tener los par\u00e1metros que creamos oportunos pero no retorna ning\u00fan valor y lo que si deber\u00e1 tener es una llamada a <strong>EventDispatcher.dispatchEvent <\/strong>para lanzar el evento, esta llamada tendra los siguientes parametros:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El componente que sera \u00ab<strong>this<\/strong>\u00bb para saber donde esta lanzando el evento<\/li>\n\n\n\n<li>Cadena con el nombre del evento, que es el nombre de la funci\u00f3n creada. <strong>Cuidado<\/strong> si ponemos otro distinto no tendremos error pero no lo capturaremos.<\/li>\n\n\n\n<li>Par\u00e1metros que dar\u00e1n informaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code> @SimpleEvent(description = \"Evento que se dispara si Llega a 5 la suma\")\n   public void Llego(String texto) {\n      ... C\u00f3digo antes de despachar el evento ...\n      EventDispatcher.dispatchEvent(this, \"Llego\", texto);  \/\/Despacha evento con los datos que le llegan\n      .. c\u00f3digo despu\u00e9s de despacharlos\n   }\n<\/code><\/pre>\n\n\n\n<p>Esto es muy \u00fatil 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\u00f3n.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"306\" height=\"147\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-11.png\" alt=\"\" class=\"wp-image-1167\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-11.png 306w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-11-300x144.png 300w\" sizes=\"auto, (max-width: 306px) 100vw, 306px\" \/><\/figure>\n\n\n\n<p>Pero podemos utilizar los eventos, junto a \u00ab<strong>try{..}catch()<\/strong>\u00ab, para capturar excepciones y evitar pantallas de error en tiempo de ejecuci\u00f3n  y abortar la aplicaci\u00f3n pues a veces se pueden intentar reparar.<\/p>\n\n\n\n<p>podemos ver un evento que se genera cuando se produce una excepci\u00f3n, en este caso la divisi\u00f3n por cero.<\/p>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"636\" height=\"143\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-10.png\" alt=\"\" class=\"wp-image-1166\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-10.png 636w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-10-300x67.png 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/figure>\n\n\n\n<p>Por ejemplo en una divisi\u00f3n por cero como podemos ver en el ejemplo, lo que hacemos es capturar la excepci\u00f3n y lanzar un evento que gestionaremos para dar avisos mas sencillo o resolverlos.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"524\" height=\"138\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-13.png\" alt=\"\" class=\"wp-image-1171\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-13.png 524w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2024\/08\/image-13-300x79.png 300w\" sizes=\"auto, (max-width: 524px) 100vw, 524px\" \/><\/figure>\n\n\n\n<p>La captura de la excepci\u00f3n se realizara como siempre en java con \u00ab<strong>try{ .. } catch(Exception e) { &#8230;}<\/strong>\u00bb y dentro de catch llamaremos a la func\u00f3n que lanza el evento, en nuestro caso \u00ab<strong>OcurreUnError<\/strong>\u00bb con la anotaci\u00f3n <strong>@SimpleEvent<\/strong> .<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public int Divide(int numero1, int numero2) {\n     int resultado = 1966; \n     try {\n        resultado = numero1 \/ numero2;\n     } catch(Exception e) { OcurreUnError(e.getMessage(),9 ); }   \/\/ Da el mensaje de erro y un c\u00f3digo de error.\n     return resultado;\n  }\n\n@SimpleEvent(description = \"Evento que se dispara si ocurre un error\")\n   public void OcurreUnError(String error, int codError) {  ........ No olvidar EventDispatcher.dispatchEvent .. }\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tambi\u00e9n podemos definir bloques de gesti\u00f3n de eventos, ya sea cuando finaliza una lectura o simplemente cuando se genera una excepci\u00f3n. En este caso tenemos el c\u00f3digo de ejemplo en https:\/\/github.com\/pinguytaz\/extAppInventor\/blob\/main\/Ejemplos\/src\/losejemplos\/Eventos.java en donde hemos creado una funci\u00f3n que va sumando y cuando esta llega a 5 lanza el evento, que sera una funci\u00f3n con la [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1168,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[2,6,12],"tags":[21,199,205,204,33],"class_list":["post-1153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-java","category-openjdk","tag-android","tag-appinventor","tag-eventos","tag-excepciones","tag-java"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=1153"}],"version-history":[{"count":5,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1153\/revisions"}],"predecessor-version":[{"id":1172,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/1153\/revisions\/1172"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/1168"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=1153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=1153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=1153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}