我在Java中有一个嵌套数组,如下所示:
String [] [] x;
在我的代码中,我将其转换为JSON字符串,将其通过@JavascriptInterface桥传递给使用此代码在WebView中运行的javascript:
String ret = (new JSONArray(Arrays.asList(x))).toString();
这在较新的设备上运行良好,但在测试旧设备时,我遇到了非常奇怪的行为。而不是像这样创建一个漂亮的字符串:
"[ [ 1.234, 5, 7 ], [ 23.456, 7, 8 ] ]"
它创建了一个如下所示的字符串:
'["[Ljava.lang.String;@405ba988"]'
据我所知,我使用的所有对象(JSONArray,Arrays)和相应的成员函数(toString,asList)自API级别1起就已存在。
我做错了什么,或者我是否缺少一些我需要做的事情来适应早期版本的Android?
答案 0 :(得分:3)
在Android 4.4(api 19)之前,following是构造函数代码:
public JSONArray(Collection copyFrom) {
this();
Collection<?> copyFromTyped = (Collection<?>) copyFrom;
values.addAll(copyFromTyped);
}
正如您所看到的,它只是添加了集合的成员,这就是为什么您'["[Ljava.lang.String;@405ba988"]'
没有对它们进行额外处理的原因。
在Android 4.4(api 19)中添加了一些功能,并将wrap方法添加到JSONObject
方法,该方法可以处理数组,JSONArray
中的相同构造函数为{{3}使用它:
public JSONArray(Collection copyFrom) {
this();
if (copyFrom != null) {
for (Iterator it = copyFrom.iterator(); it.hasNext();) {
put(JSONObject.wrap(it.next()));
}
}
}