Cómo retornar un objeto JSON desde Java a Javascript (cordova)

En cordova, necesitarás enviar información a la vista (no simplemente cadenas de texto). Dicha información puede ser eficientemente enviada a la vista en una cadena de texto de JSON, sin embargo no crearás el objeto JSON de un array u objeto manualmente (con ciclos for) pues sería una mala practica.

Incluye los componentes requeridos

Necesitas incluir los siguientes componentes en tu clase, luego podrás crear objetos y arrays en formato JSON (recuerda que si usas bloques try and catch necesitarás incluir tambien la clase de JSONException).

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

Creando un objeto JSON en Java

En Javascript la creación de un objeto es realmente sencillo, necesitas simplemente asignar el nombre de la propiedad al objeto y ya está (con notación de puntos o llaves [object.name ó property[name]]). Incluso con Java esta tarea tambien es sencilla, aunque diferente, simplemente debes declarar una variable e instanciar la clase JSONObject y usar el método PUT para agregar una nueva propiedad.

JSONObject item = new JSONObject();
item.put("nombre", "filename.java");
item.put("directorio","undirectorio-imaginario");
// En javascript, esto equivale a 
// {nombre:"filename.java",directorio:"undirectorio-imaginario"}

La variable item contiene las llaves nombre y directorio, tal y como la tendría un objeto en Javascript.

Creando un array JSON en Java

En Javascript, necesitas ejecutar el método push para agregar un nuevo item a un array existente. Con Java es basicamente lo mismo, pero con otro nombre (add).

JSONArray jsonArray = new JSONArray();
jsonArray.add("item numero 1");
jsonArray.add("item numero 2");
// En Javascript equivale a
// ["item numero 1","item numero 2"]

Enviando un array u objeto JSON a Javascript en cordova

Usualmente, para enviar información de Java a Javascript con alguno de los siguientes métodos:

String informacion = "mi Información";

PluginResult result = new PluginResult(PluginResult.Status.OK, informacion);
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);

// ó

callbackContext.success(informacion);

En este caso, si intentas remplazar la variable información con alguno de las variables anteriormente creadas JSONArray o JSONObject pues obviamente obtendrás un error al enviar. Pero, porque? Simplemente porque no estás enviando una cadena de texto, recuerda que solo puedes enviar texto de Java a Javascript, así que nuestro objeto o array debe ser convertido a texto. Para ello, debes usar el método toString de cada variable.

JSONArray jsonArray = new JSONArray();
JSONObject item = new JSONObject();

// Enviar un objeto
callbackContext.success(item.toString());
// Enviar un array
callbackContext.success(jsonArray.toString());

Diviertete !

Esto podría ser de tu interes

Conviertete en un programador más sociable