我正在尝试将数组从我的活动传递到位于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上测试我的项目:
代码在Samsung Note 2(JB 4.2.1)和AVD上使用目标Google API(API级别8)正常工作,而在Asus Nexus 7(JB 4.2.2)和其他AVD与JB 4.2上代码停止工作返回Web控制台错误:
03-25 16:35:12.809:E / Web Console(11352):未捕获的SyntaxError: 文件中的意外标记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
有没有人对解决它有任何想法?
拜托,欢迎任何帮助!
答案 0 :(得分:3)
更改您的Javascript接口以返回String。 JSON.parse需要一个字符串,而不是一个JSON对象。
@JavascriptInterface
public String getValues() {
String values = "[100,133,'',120,122,132,133]";
return values;
}
值字符串可能需要在javascript函数的引号中才能解析它。换句话说:
return "'" + values + "'";