我正在尝试将我的活动中的数组传递给位于 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
有人对解决它有任何想法吗?
拜托,欢迎任何帮助!