如何从JavascriptInterface返回JSONArray

时间:2014-07-14 18:35:09

标签: javascript android json arrays

我试图使用Javascript捕获HTML的表单数据并将它们作为JSONArray返回到Java,但似乎JSONArray未在JavascriptInterface中正确返回到Java。

Javascript在Chrome中完美运行,因此问题应该是在java端或接口上。

mWebView.loadUrl("javascript: FeArray=document.getElementsByTagName('input')");
mWebView.loadUrl("javascript: JSJSONArray = []");
mWebView.loadUrl("javascript: for(i=0;i<FeArray.length;i++) { fe=FeArray[i]; JSJSONArray.push({'id':fe.id,'type':fe.type,'checked':fe.checked,'value':fe.value});}");
mWebView.loadUrl("javascript: JSBridge.transferFromJS2Java(JSJSONArray)");

transferFromJS2Java是一个@JavascriptInterface函数,实现如下:

public class JSBridge{
    @JavascriptInterface
    public void transferFromJS2Java(String data) {
        mJSONArray = new JSONArray(data);
    }
}

这里mJSONArray是一个全局变量。

我想我可能无法以这种方式复制JSONArray。有没有更好的方法可以将JSJSONArray从Javascript复制到Java?

1 个答案:

答案 0 :(得分:0)

所以我在讨论中提到的解决方案是在Javascript中对JSONArray进行字符串化:

mWebView.loadUrl("javascript: var JSString = JSON.stringify(JSJSONArray);");
mWebView.loadUrl("javascript: JSBridge.transferFormData(JSString)");

然后在Java端,使用问题中的第二个代码段将String转换回JSONArray。