Как вернуть объект json из Java в JavaScript (Cordova)

В cordova вам может потребоваться вернуть некоторые данные в представление (не только простые строки). Эти данные можно эффективно отправить в представление с помощью JSON, однако мы не будем создавать строку JSON из массива вручную, потому что это не очень хорошая практика.

Чтобы отправить информацию из Java в Javascript в Cordova с Java Android:

Включите необходимые компоненты

Нам нужно включить в класс следующие компоненты, тогда мы сможем создавать массивы и объекты json (если вы используете блок try и catch, вам нужно включить исключение JSONException).

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

Создание объекта JSON в Java

В javascript создание объекта действительно легко, вам просто нужно назначить имя свойства для объекта и все (с помощью обозначения точки или скобок). С java тоже все просто, но иначе, мы создадим переменную с типом JSONObject и будем использовать функцию PUT для добавления ключа.

JSONObject item = new JSONObject();
item.put("name", "filename.java");
item.put("filepath","aimaginarypath");
// in javascript this is something like
// {filepath:"aimaginarypath",name:"filename.java"}

переменная item содержит ключи name и filepath как обычный объект javascript.

Создание массива JSON в Java

В javascript нам нужно вызвать функцию push, чтобы добавить элемент в существующий массив. С Java то же самое, только с другим именем (добавить).

JSONArray jsonArray = new JSONArray();
jsonArray.put("item number 1");
jsonArray.put("item number 2");
// in javascript this is something like :
// ["item number 1","item number 2"]

Отправка

Чтобы отправить массив или объект, мы будем вызывать метод toString для переменных. Вот два способа отправки результатов в Cordova (помните, что callbacks = переменная callbackContext вашего класса):

Асинхронный (с использованием threadPool)

JSONArray jsonArray = new JSONArray();
jsonArray.put("item number 1");
// send the JSONArray using jsonArray.toString();
PluginResult result = new PluginResult(PluginResult.Status.OK, jsonArray.toString());
result.setKeepCallback(true);
callbacks.sendPluginResult(result);

«Синхронный»

JSONObject item = new JSONObject();
item.put("name", "filename.java");
callbacks.success(item.toString());

Тогда вам нужно только разобрать его с помощью Javascript (JSON.parse (jsonstring)), получайте удовольствие!

Ссылка на основную публикацию