5

Assets dir にある html ファイルで、アクティビティから javascript メソッドに配列を渡そうとしています。

JSONArray のような int 配列を渡す JavascriptInterface を使用しています。

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) およびターゲットの 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): Uncaught SyntaxError: Unexpected token o at file:///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

誰かがそれを解決する考えを持っていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

4

文字列を返すように Javascript インターフェイスを変更します。JSON.parse は、JSON オブジェクトではなく文字列を想定しています。

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

値の文字列は、javascript 関数が解析できるように引用符で囲む必要がある場合があります。言い換えると:

return "'" + values + "'";
于 2013-04-29T12:59:45.003 に答える