将值从活动传递到Android webview以获取Javascript方法

时间:2013-03-25 16:31:32

标签: javascript json android-webview parameter-passing

我正在尝试将数组从我的活动传递到位于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

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

拜托,欢迎任何帮助!

1 个答案:

答案 0 :(得分:3)

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

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

值字符串可能需要在javascript函数的引号中才能解析它。换句话说:

return "'" + values + "'";