Desde Android y en general desde tecnología de desarrollo para móviles, el uso de interfaces o librerías para atacar a bases de datos es totalmente imposible por varias razones:
- La principal es para evitar problemas de seguridad. Un usuario que está más o menos registrado realizaría accesos a la base de datos, al final, lo más importante de las aplicaciones de una forma directa y no controlada
- Escalabilidad y mantenimmiento. Tener el desarrollo preparado para realizar todo el proceso contra una tecnología de base de datos no proporciona la escalabilidad para poder realizar cambios o mejoras
Por este motivo es necesario poder realizar consultas a servicios en la nube que nos permita devolver contenido e incorporar a nuestra aplicación. Y actualmente el protocolo más legible, rápido y fácil de incorporar es el uso de JSON
Conexión al servicio
El primer e importante paso es conectarnos al servicio web o API que nos proporcione los datos necesarios, es decir el JSON para comenzar a tratar los datos.
Para ello utilizaremos los datos que nos proporciona el ayuntamiento de Valencia en el Portal de datos abiertos, y en concreto utilizaremos los datos referentes a las cámaras de tráfico y seguridad de Valencia.
Y ¿cómo hacemos esto? Pues tan sencillo o complicado como utilizando la clase AsynTask y HttpURLConnection de Android. El código en concreto sería el siguiente acompañado por supuesto de la explicación en vídeo:
// Setup the connection with the DB
//Esta clase realizará la conexión devolviendo el JSON
@Override
protected JsonReader doInBackground(String... args) {
String temp = "";
try {
URL url = new URL(urlCamaras);
urlConnection = (HttpURLConnection) url.openConnection();
temp = urlConnection.getResponseMessage();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
CameraJSONReader cJSONReader=new CameraJSONReader();
try {
camaras = cJSONReader.readJSONMsg(reader);
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) urlConnection.disconnect();
return reader;
}
}
Parseando el JSON
El segundo paso es parsear los datos de acuerdo a nuestras necesidades y la estructura del JSON, para este procedimiento no existe un único método ni mecanismo de realizar el proceso ya que el objetivo, la aplicación y el documento JSON serán diferentes
En nuestro caso planteamos un ejemplo haciendo uso de la clase JSONReader, que permite avanzar y parsear el Buffer recogido de la conexión
Un trozo de ejemplo sería el siguiente, aunque para entender correctamente su funcionamiento es mejor visualizar el vídeo:
// Setup the connection with the DB
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
Log.i("MENSAJE","LLEGO A JSON");
if (name.equals("features")) {
//Estamos en el array de camaras
Log.i("MENSAJE","ENTRO EN FEATURES");
reader.beginArray();
while (reader.hasNext()) {
camaras.add(readCamara(reader));
Log.i("MENSAJE","CAMARA AÑADIDA");
}
reader.endArray();
}else {
reader.skipValue();
}
}
