【问题标题】:Passing an array of values from Android Activity to JavaScript in a WebView将一组值从 Android Activity 传递给 WebView 中的 JavaScript
【发布时间】:2026-02-20 06:45:02
【问题描述】:

我正在使用 JS Charts 库在我的 Android 应用程序的 WebView 中绘制图形。我想提供来自 SQLite 数据库的数据。此刻,我被困在如何将数据数组从 Java 传递到 JavaScript 上。 JavaScript 部分需要这样的东西:

data = new Array([10, 10], [20, 10]);

我知道addJavaScriptInterface 并且我设法将单个值从我的 Activity 传递到 WebView。只有数组给我带来了麻烦。我想过这样的事情:

final class ChartDataLoader {

    public double[][] getData() {
        double[][] data = {{10, 10}, {20, 10}};
        return data;
    }
}

请注意,目前我只是对数据进行硬编码,但最终会从数据库中提取出来。所以我把它暴露给我的 JS:

webView.addJavascriptInterface(new ChartDataLoader(), "dataLoader");

最后尝试用 JavaScript 读取它:

<html>
<head>
<script type="text/javascript" src="jscharts.js"></script>
</head>

<body>
<div id="chartcontainer">You should see a chart here.</div>

<script type="text/javascript">

 myData = dataLoader.getData(); 
 alert("DataReceived: " + myData.length);
 alert("Element 0 : " + myData[0]);

 var myChart = new JSChart('chartcontainer', 'line');
 myChart.setDataArray(myData);
 myChart.draw();

</script>
</body>
</html>

JavaScript 在这两个警告语句上失败:

错误/Web 控制台 (2455):未捕获 类型错误:无法读取属性 未定义的“长度”在 文件:///android_asset/chart.html:15

有什么提示吗?我在网上看到一些代码,其他人将数组转换为字符串,然后用 JavaScript 重新创建它,但这对我来说似乎有点过头了,我希望有更好的解决方案。另一种方法是将 XML 文件传递​​给图表库,但我认为每次用户想要查看图表时创建新的 XML 会很慢。

【问题讨论】:

  • 嗯,是的......我认为你将不得不解析字符串并在 JS 中重新创建数组。但是,我不明白,为什么会有这样的问题?

标签: java javascript android android-webview


【解决方案1】:

删除行:alert("DataReceived: " + myData.length);

【讨论】:

    【解决方案2】:

    要修复最近的错误,您需要将 myData 定义为 var。

    您在问题(将数组转换为字符串)结尾处谈论的是 JSON。任何上下文切换都是昂贵的(例如 Android 到 Web)。序列化/反序列化可能不会减慢您的速度。

    【讨论】: