Inicio > Android, Java, Javascript, PHP, Programación > Android, PHP y JSON

Android, PHP y JSON


Pues mi primer proyecto para Android fue la programación de un Tagboard para la web de Oberón, y para ello estuve viendo diferentes formas de realizar la comunicación con el servidor, y entre todas, me qué finalmente con el JSON.

¿Que es el JSON y para que sirve?

El JSON es una forma de codificar objetos, arrays o cualquier otra serie de datos en un string y posteriormente poder descodificarlo sin muchos problemas.

Esto es especialmente útil para enviar información entre cliente y servidor de una forma muy sencilla, puesto que cada componente descodifica la información según le convenga, indistintamente del resto del sistema.  Originalmente estaba destinado ser usado para Javascript, pero cada vez más lenguajes lo soportan de forma nativa.

A muchos les recordará al XML, y es la idea es la misma, sin embargo, el JSON está pensando para el tráfico de información por internet, minimizando el uso de caracteres para conseguir una codificación más pequeña.

Unos ejemplos recién traídos de wikipedia:

JSON:

{"menu": {
"id": "file",
   "value": "File",
   "popup": {
     "menuitem": [
       {"value": "New", "onclick": "CreateNewDoc()"},
       {"value": "Open", "onclick": "OpenDoc()"},
       {"value": "Close", "onclick": "CloseDoc()"}
     ]
   }
 }}

XML:

<menu id="file" value="File">  <popup>
<menuitem value="New" onclick="CreateNewDoc()" />
   <menuitem value="Open" onclick="OpenDoc()" />
    <menuitem value="Close" onclick="CloseDoc()" />
  </popup>
</menu>

Código, quiero ver código

En el Tag de Oberón conviven el PHP y el Javascript, y ahora también añadimos Java de Android, así que el JSON nos viene genial para poder enviar la información, pues cada uno la tratará como le convenga.
Lo primero que tenemos que hacer es cifrar la información, en este caso, en el servidor PHP, para ello, basta con crear un array asociativo con los datos pertinentes.

$informacion = array();
$mensajes = array();
$mensajes[] = "Mensaje 1";
$mensajes[] = "Mensaje 2";
$informacion["mensajes"] = $mensajes;
$destinatarios = array();
$destinatarios[] = array("nombre"=>"usuario1", "email"=>"email@cosa.com");
$destinatarios[] = array("nombre"=>"usuario2", "email"=>"email2@cosa.com");
$informacion["destinatarios"] = $destinatarios;
$informacion["titulo"] = "Mensajes de prueba";
echo json_encode($informacion);

Una vez tengamos la información debidamente codificada en JSON, deberemos obtenerla en nuestra aplicación Android. Lo normal en estos casos será  que usemos una petición HTTP al servidor y que la respuesta la codifiquemos en un string. Eso ya que cada uno lo haga como quiera.

String jsonCodificado = getJson();
//Obtenemos el Objeto a partir del String
JSONObject json = (JSONObject) new JSONTokener(jsonCodificado1).nextValue();
String titutlo = json.getString(”titulo”);
//Obtenemos un array de JSON
JSONArray destinatarios = json.getJSONArray(”destinatarios”);
String dest = new String[destinatarios.length()];

for (int i = 0; i < destintarios.lenght(); i++) {
    //Como cada elemento del array está en JSON,
    //obtenemos el objeto JSON correspondiente
    JSONObject d = destintarios.getJSONObject(i);
    //Obtenemos los datos del susodicho
    dest[i] = d.getString(”nombre”) + ” <” + d.getString(”email”) + ” > “;
}

//Obtenemos el Array de JSON
JSONArray mensajes = json.getJSONArray(”mensajes”);
String men = new String[mensajes.length()];
for (int i = 0; i < mensajes.lenght(); i++) {
   //En este caso, cada elemento del array es un mero String,
   // así que lo insertamos directamente
   men[i] = mensajes.getString(i);
}

Creo que el ejemplo explica más o menos las diferentes situaciones que se dan.

Bueno, me gustaría comentar que también tenéis cosas del tipo getDouble, getBoolean…

Si queréis crear el JSON en Android y enviadlo, es tan fácil como hacer:

JSONObject json = new JSONObject();
json.put(”titulo”, “Nuevo título”);
….
String jsonstring = json.toString();

Espero que os sea de utilidad.

Si os interesa como va el tagboard, os dejo un vídeo aquí.

En próximos tutoriales explicaré como se hace para ser “instantáneo” mediante una conexión HTTP normal haciendo uso de Long Polling.

Anuncios
Categorías:Android, Java, Javascript, PHP, Programación Etiquetas: , ,
  1. jose
    21 junio, 2013 en 4:35 am

    hola hermanaso tu tuto esta genial te tengo una pregunta puesto q soy novato en cosas de java yo quiero hacer lo siguiente se generaran numeros aleatorios y quiero q cada vez q el numero sea superior a 120 este inserte una serie de datos sin necesidad de ejecutar un boton o algo no se si me explico quiero hacer inserciones a la base de datos sin necesidad de usar un boton para ejecutar la accion si no cuando se genere un numero superior a 120 no se si tengas algun ejemplo de esto realmente me interesa mi nombre es jose dejo mi correo jose_xp_799@hotmail.com

  2. Natalia
    19 julio, 2013 en 12:47 pm

    Para lo que qioeres hacer en java debes buscar informacion sobre Math.random() con esta funcion generas numeros aleatorios y segun las caracteristicas que le especifiques puedes conseguir failmente lo que quieres:

    http://www.todosoluciones.es/2012/01/13/generar-numeros-aleatorios-math-random-java/

    Aqui veras algunos ejemplos

  3. Natalia
    19 julio, 2013 en 12:48 pm

    Yo tengo una duda sobre lo explicado en el post

    Yo tengo una lista con unos datos, esto los quiero guardar en un json y enviarlo a un servidor remoto a un php, como lo puedo hacer, sobre tod la parte de convertir la lista a json

  4. 14 agosto, 2013 en 10:52 pm

    hola buenas… si yo quiero covertir un array como este por ejemplo: ” ArrayList valorCheck = new ArrayList();” … a JSON y de JSON a php … para en php revisirlo como un array.. y poder colocarlo como condicion en query que le hara a la BD????

    • 15 agosto, 2013 en 8:48 am

      Es igual. Creas un objetos del tipo JsonArray y le insertas JsonObject. Los envías a PHP por cualquier método y cuando le hagas el json_decode te devolverá un array normal y corriente de PHP.

  5. 7 noviembre, 2013 en 1:05 pm

    Tenes idea de como enviar ese JSON comprimido? y decomprimirlo en php

    • 7 noviembre, 2013 en 3:08 pm

      La verdad es que no he probado, pero vamos, la finalidad del JSON es simplificar al máximo el envío y recepción de datos. Si quieres reducir el consumo de datos lo suyo sería configurar el servidor para admitir compresión en gzip y configurar el envío para que lo utilice. De esta forma todo el proceso de compresión de datos se hará de forma automática.

  1. No trackbacks yet.

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: