4

Android アプリケーションの WebView でグラフを描画するために JS Charts ライブラリを使用しています。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 は、次の 2 つのアラート ステートメントで失敗します。

エラー/Web コンソール (2455): キャッチされていない TypeError: ファイル:///android_asset/chart.html:15 で未定義のプロパティ '長さ' を読み取ることができません

ヒントはありますか?他の人が配列を String に変換してから JavaScript で再作成するコードをオンラインでいくつか見ましたが、それはやり過ぎのように思え、より良い解決策を望んでいました。別の方法として、XML ファイルをグラフ ライブラリに渡すこともできますが、ユーザーがグラフを表示するたびに新しい XML を作成するのは時間がかかると思いました。

4

2 に答える 2

5

次の行を削除します: alert("DataReceived: " + myData.length);

于 2012-11-12T09:23:05.317 に答える
0

最新のエラーを修正するには、myData を var として定義する必要があります。

質問の最後(配列を文字列に変換する)で話しているのはJSONです。どのコンテキスト スイッチもコストがかかります (例: Android から Web)。シリアライゼーション/デシリアライゼーションは、おそらくそれほど遅くなりません。

于 2010-12-02T02:26:57.557 に答える