
Hello Android! (V)
Buenos días a todos, y bienvenidos a la quinta entrega de Hello Android! (V). Es la última de la serie, lo que da algo de penica pero ya sabéis lo que dicen, lo bueno si breve…
En este artículo vamos a ver cómo comunicar 2 aplicaciones completamente distintas: La que tenemos hecha en Android, y una web en PHP. A través de este mecanismo compartiremos información entre todos los teléfonos que instalen nuestra app.
Como sabréis si leísteis la entrada de PHP, éste es un lenguaje orientado a páginas web que nos permite interactuar con el usuario. La idea es que nuestra app será la que «conversará» con esta web, como si fuera un usuario más, y la usará para guardar la información de la compra.
Hello Android! (V): Comenzando
1. Lo primero que necesitamos es un hosting PHP. Traduciendo al castellano, un servidor que nos ofrezca espacio para crear nuestras páginas PHP y una base de datos. Yo he escogido éste:
Había muchísimos más y la mayoría buenos, pero este era el mas fácil de configurar de los que he mirado.
2. Después lo que haremos es subir nuestra página PHP al servidor, y crear la base de datos para que los datos se puedan almacenar.
3. El tercer y último paso, es añadir el código necesario a nuestra app Android para:
a) Enviar los datos desde Android a PHP, para insertar en la base de datos compartida.
b) Enviar la lista de productos desde PHP a Android con los datos actualizados.
Código PHP y Base de datos
Necesitaremos 2 páginas PHP diferentes, una para guardar los productos que enviamos desde nuestro tablet/teléfono y otra para listarlos y enviarlos hasta el dispositivo. En realidad, una web que sirve para comunicar 2 aplicaciones, o para enviar y recibir información entre ellas se llama «WebService» o con mis grandes dotes de idiomas, servicio web.
insertar.php
Este fichero está ubicado en la ruta: http://espai.site90.com/insertar.php
Si intentáis acceder no veréis el código fuente, sino el resultado.
listar.php
Este fichero está ubicado en la ruta: http://espai.site90.com/listar.php
Si intentáis acceder no veréis el código fuente, sino el resultado.
En este código merece una especial mención la función json_encode. Ésta se encarga de recibir un array y convertirlo a una cadena de texto en formato JSON. Estas siglas representan un estándar de codificación, una manera de enviar información compleja como texto simple. Si conocéis XML la idea es la misma, dar una estructura y orden a la información para que sea fácil de intercambiar entre aplicaciones.
Para que veáis un ejemplo os adjunto 2 documentos, uno en formato XML y otro en JSON
Ejemplo de documento XML
(Para aprender más sobre él, consulta este artículo)
Ejemplo de documento JSON
Como veis son bastante parecidos, aunque con diferencias. JSON no usa etiquetas, por lo que es ligeramente más compacto que XML. Vamos que ocupa menos, podemos entenderlo como un XML simplificado. A causa de esta simplificación es más rápido de aprender, y aunque no es tan potente como el primero va perfecto para nuestro ejemplo.
Código Android
Tal como está nuestra app Android, ya permite insertar elementos en la lista y mostrar el contenido. Lo que ocurre es que sólo utiliza información de nuestro teléfono, para que actualice la base de datos y muestre el contenido de la misma deberemos «comunicar» con el código PHP que hemos escrito.
Antes de nada, y para no olvidarlo debemos añadir esto al AndroidManifest.xml:
<uses-permission android:name=»android.permission.INTERNET» />
<uses-permission android:name=»android.permission.ACCESS_NETWORK_STATE» />
Esas líneas lo que hacen es decirle a Android «permite a esta app usar internet, y acceder al estado de la red». Si no las ponemos, recibiremos un mensaje de error cuando la app intente conectarse a PHP.
Lo siguiente es modificar nuestro Activity. A continuación añado el código, con sólo un apunte: Aparece un fichero nuevo (Conexion.java) que se encargará de consultar la base de datos e insertar los nuevos productos.
Código del activity HelloAndroid.java
Código de la clase Conexion.java
Y ya está. Lo único que nos falta por hacer es instalar en nuestro teléfono/tablet la aplicación.
Instalación de la aplicación
Tenemos 2 posibilidades:
- Exportar el proyecto como aplicación Android, y enviarnos al teléfono el fichero HelloAndroid.apk. Cuando nos llegue (por ejemplo, por e-mail) abrir el fichero .apk, y el dispotitivo detectará que es una aplicación y nos preguntará si queremos instalarla. Nota: Debes tener marcada en configuración la opción «aplicaciones de fuentes desconocidas», ya que nuestra app no viene de Google Play sino directamente de nuestro Eclipse.
- Conectar nuestro teléfono al ordenador y cuando ejecutemos el proyecto, escoger nuestro teléfono en lugar del dispositivo virtual. Esto instalará automáticamente la aplicación.
Cualquiera de las dos es buena, el segundo sistema es más fácil pero si no detecta vuestro teléfono por la marca, o tenéis problemas con el driver la primera opción funciona siempre.
Exportar: Paso 1
Exportar: Paso 2
Ejecución de la aplicación
Éste es el aspecto final de la app.
Los productos que aparecen pueden variar, es más os invito a que lo probéis y buceéis un poco en el código. La programación es algo práctico que se aprende «tocando» asi que sin miedo! Manos a la obra.
Aquí tenéis el proyecto para descargar. Solo descomprimir, e importar en Eclipse.
http://www.espailab.com/blog/descargas/HelloAndroid.rar
Y hasta aquí la última entrega de la serie. En la misma hemos visto el proceso completo de creación de una app, cómo comunicar con otras aplicaciones y dispositivos, y cómo instalarla. Espero que os haya parecido interesante, y me despido de vosotros hasta el próximo artículo!
Esteve
hola buenas los metodos usados a dia de hoy 22/09/2016 estan obsoletos.
he estado buscando y he encontrado el metodo HttpURLConnection.
Tambien en el codigo de php hemos encontrado una cosa que lo mejora, en el while si lo llenamos con ‘utf8_encode’ se podra añadir los caracteres especiales a la base de datos y no dara error.
Todo esto lo expongo porque llevo varios dias buscando la solucion y creo que os ayudara.
Un saludo
Macarena
Hola! lo primero, enhorabuena por tu blog, me encanta. En segundo lugar, te quería preguntar que métodos en el MainActivity son los necesarios para realizar consultas solo. Yo en lugar de hacerlo desde un MainActivity, lo hago desde un Fragment con un Slider. Muchas gracias y sigue así!
Macarena
No se por que, me devuelve nulo cuando ejecuto la aplicacion en mi movil. Yo estoy cargando los listview desde un fragment. El OnCreate sería el mismo que el OnCreateView? y que métodos debería de llamar si solo quiero llenar el listview con la consulta?
Muchas gracias y enhorabuena por el blog!
Jordi Escobar Roig
No hay de qué Yoli, acabo de ver tu comentario! El tema es bastante seco, por eso intento que sea lo mas agradable posible 🙂
Gracias por escribir y un saludo!
Yoli
Muchas gracias por compartir el código! Voy a probarlo ahora.
Por cierto, me gusta como escribe las entradas y le das ese toque gracioso jajaja.
Saludos!