本文概述
在cordova中, 你可能需要从Java返回一些数据到Javascript视图(不仅是简单的字符串)。可以使用JSON将这些数据高效且轻松地发送到视图, 但是我们不会手动从数组创建JSON字符串, 因为这不是一个好习惯, 你可以使用Cordova已提供的org.json库。
包括必需的组件
我们需要在类中包括以下组件, 然后我们才能创建json数组和对象(如果使用try and catch block, 则需要包括JSONException)。
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
用Java创建JSON对象
在javascript中, 创建对象确实非常容易, 你只需要为对象分配属性名称即可, 仅此而已(使用点或括号表示法)。使用Java也很简单, 但是有所不同。
JSONObject构造函数可用于将外部表单JSON文本转换为内部表单, 可使用get和opt方法检索其值, 或使用put和toString方法将值转换为JSON文本。如果可以找到一个get方法, 则返回一个值;如果找不到一个方法, 则抛出异常。 opt方法返回默认值而不是引发异常, 因此对于获取可选值很有用。
在这种情况下, 我们只想将数据从Java发送到Javascript, 我们将创建一个类型为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"}
可变项包含名称和文件路径键, 作为普通的javascript对象。
用Java创建JSON数组
在javascript中, 我们需要调用push函数将项目添加到现有数组中。与java相同, 只是你需要使用JSONArray类声明一个新数组, 并使用add添加各项。
JSONArray可以将JSON文本转换为Java对象。 toString方法转换为JSON文本, 这就是我们要发送到Javascript的内容。
JSONArray jsonArray = new JSONArray();
jsonArray.add("item number 1");
jsonArray.add("item number 2");
// in javascript this is something like :
// ["item number 1", "item number 2"]
使用Cordova将JSON数组和JSON对象发送到javascript
通常, 我们会使用以下一些选项将响应从Java返回到javascript:
String response = "myinformation";
PluginResult result = new PluginResult(PluginResult.Status.OK, response);
result.setKeepCallback(true);
callbackContext.sendPluginResult(result);
// or
callbackContext.success(response);
在这种情况下, 如果尝试将响应替换为以前创建的变量之一(item或jsonArray), 则显然会出现错误。为什么呢?因为你要发送的不是字符串变量, 所以请记住JSON是字符串, 我们将仅使用变量的toString方法将其转换为JSON String表示法:
JSONArray jsonArray = new JSONArray();
JSONObject item = new JSONObject();
// Send an object
callbackContext.success(item.toString());
//or Send an array
callbackContext.success(jsonArray.toString());
玩得开心 !