Usando APIs (III)

Probando las “librerías”

Vamos a meternos ya a probar en una app simplona estas clases. El objetivo de esta app es simplemente ver cómo funcionan (y que funcionan, claro) estas clases diseñadas para tratar con las API mencionadas.

Creamos, como siempre, un proyecto para Android 2.2, con el nombre que deseemos. Sólo precisará de una Activity y un layout.

En el layout incluiremos 8 TextViews en filas de a 2 (4 LinearLayouts en horizontal dentro de uno en vertical es uno de los modos de conseguirlo), de modo que queden como nombre_de_campo: valor_de_campo. En este orden, servirán para ver las coordenadas que usaremos, mostrar la dirección de dichas coordenadas, ver el enlace “largo” que usaremos, y mostrar el enlace acortado. Aquellos que vayan a contener enlaces precisarán de un atributo especial para que sean clickables y abran la web (o la app, que también puede ser) adecuada:

android:autoLink="web"

Hay que recordar que los TextViews que vayan a alojar “valores” deben tener su id, cosa no necesaria para las “etiquetas” al ser completamente estáticas para este caso.

Aparte de todo eso, al final un Button para iniciar el proceso y ya tendríamos listo un layout similar a éste.

Vamos ahora a por el AndroidManifest. Dado que vamos a conectarnos a internet, precisaremos los permisos adecuados: En este caso, el “uses-permission” android.permission.INTERNET

Por supuesto, si no hemos creado nuestra Activity desde el asistente de creación de proyectos, también tendrá que registrarse aquí. En caso contrario ya deberíamos tener en el xml algo parecido a

      <activity android:name=”.LibTesterActivity”
                  android:label=”@string/app_name”>
            <intent-filter>
                <action android:name=”android.intent.action.MAIN” />
                <category android:name=”android.intent.category.LAUNCHER” />
            </intent-filter>
        </activity>

Vamos, pues, a por el código de la Activity. En su onCreate asignaremos todos los TextViews y el botón a los atributos que habremos creado en la clase para tal fin. Las coordenadas las podemos tomar como ya vimos en la app de ubicación, o bien marcarle unas coordenadas harcodeadas en la propia clase. Yo opté por esta segunda solución para facilitar la prueba. Fui a maps.google.com, marqué un punto en el mapa y obtuve las coordenadas del enlace para compartir. Con el enlace “largo”, lo mismo. Una búsqueda por internet, y a copiar el enlace y ponerlo tal cual en el código de la Activity.

Con todo esto hecho, vamos al código del botón. Allí tenemos que instanciar la AsyncTask encargada de convertir coordenadas a dirección, la ReverseGeocodingAsynctask. Le tenemos que pasar la propia Activity como Listener así que, tal y cómo hacemos para que funcione el botón, hacemos que la Activity implemente ReverseGeocodingListener y llamamos al setReverseGeocodingListener(this). Cuándo se ejecute esta parte, se lanzará todo el proceso en Background, por lo que vamos a mostrar un diálogo de carga (ése en el que sale un semicírculo girando) que habremos declarado como atributo de la clase para poder mostrar y “apagar” en cualquier parte. Con eso ya habremos terminado con el evento onClick del botón.

Dado que la Activity ha implementado otro Listener, tenemos que implementar también su evento onReverseGeocoding, para así recibir la ResponseEnvelope que contendrá los datos que buscamos. Dentro de este método, lo primero será “cerrar” el diálogo con .dismiss();. Tras ello, hay que comprobar el estado del proceso con .getStatus. Si es igual a la constante ResponseEnvelope.STATUS_OK, podemos obtener el DAO (al que le realizaremos un casting a GoogleGeocodeAddressDAO antes de acceder a su información), en caso contrario deberemos gestionar el error de algún modo. Como ésta es una app de pruebas, por toda gestión nos limitaremos a guardar una traza de error, pero en una app “de verdad” deberíamos informar al usuario de que no se pudo realizar el proceso. Con el DAO en nuestro poder, podemos sacar la dirección formateada y mostrarla en el TextView correspondiente. Con eso ya habríamos terminado con la API de Geocoding.

Sin salir del onReverseGeocoding, instanciaremos la AsyncTask de acortamiento de URL y seguiremos el mismo proceso: implementación del Listener por parte de la Activity y asignación a la AsyncTask, amén de mostrar un nuevo diálogo (el mismo, pero con texto diferente) de carga; implementación del método onUrlShortening en el que volveremos a “cerrar” el diálogo de carga, a comprobar el estado del proceso con getStatus, obtener el DAO con casting a GoogleUrlShorteningDAO y a mostrar en el TextView adecuado el enlace corto con getShortUrl();

Nota: Hay que recordar obtener una APIKEY propia para que funcione el acortamiento de URL, y copiarla en la clase Request en el lugar indicado.

Listo todo esto, sólo queda ejecutarla para probarlo. La dirección es fácil de comprobar si es correcta, y el enlace corto tiene que llevarnos a la misma página que el largo. Dejo aquí mi código de la Activity para que sirva de comparación y vuelvo a apuntar al repo del proyecto completo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: