5

我正在尝试将我的活动中的数组传递给位于 Assets 目录中的 html 文件中的 javascript 方法。

我正在使用 JavascriptInterface 传递我的 int 数组,如 JSONArray:

public class JavaScriptInterface {

        Context mContext;       
        JavaScriptInterface(Context c) {

            mContext = c;

        }

        @JavascriptInterface
        public JSONArray getValues() {

            String values = "[100,133,'',120,122,132,133]";

            JSONArray jsonarr = null;

            try {

                jsonarr = new JSONArray(values);

            }

            catch(JSONException e) {

                e.printStackTrace();
            }

            return jsonarr;
        }


    }

在 javascript 方法中,我采用以下值:

    var data = JSON.parse(js.getValues());

现在,我正在不同的设备和 AVD 上测试我的项目:

该代码在三星 Note 2 (JB 4.2.1) 和带有目标 Google API (API 级别 8) 的 AVD 上运行良好,而在 Asus Nexus 7 (JB 4.2.2) 和其他带有 JB 4.2 的 AVD 上代码停止工作返回一个 Web控制台错误:

03-25 16:35:12.809:E/Web 控制台(11352):未捕获的语法错误:文件中的意外令牌 o:///android_asset/data/test.html:1

我需要这些值来表示使用 Javascript 库的图表。

另外,我修改了文件 proguard-project.txt 拒绝 javascript 代码混淆:

keepclassmembers class fqcn.of.javascript.interface.for.webview {
   public *;
}
-keep public class com.XXX.XXX.DataReportActivity$JavaScriptInterface
-keep public class * implements com.XXX.XXX.DataReportActivity$JavaScriptInterface
-keep classmembers class com.XXX.XXX.DataReportActivity$JavaScriptInterface {
    <fields>;
    <methods>;
}
-keepattributes JavascriptInterface

有人对解决它有任何想法吗?

拜托,欢迎任何帮助!

4

1 回答 1

4

更改您的 Javascript 接口以返回一个字符串。JSON.parse 需要一个字符串,而不是 JSON 对象。

@JavascriptInterface
    public String getValues() {
        String values = "[100,133,'',120,122,132,133]";
        return values;
    }

值字符串可能需要放在引号中,以便 javascript 函数也能够解析它。换句话说:

return "'" + values + "'";
于 2013-04-29T12:59:45.003 回答