2013-03-25 74 views
4

我試圖將數據從我的活動傳遞給位於Assets dir中的html文件中的javascript方法。將活動值傳遞給Android webview的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:

在Asus Nexus 7(JB 4.2.2)和其他的AVD上,三星Note 2(JB 4.2.1)和AVD上的目標Google API(API級別8) 4.2 e代碼停止工作會返回Web控制檯錯誤:

03-25 16:35:12.809: E/Web Console(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 

沒有任何人有任何想法有關解決呢?

請任何幫助,歡迎!

回答

3

更改您的Javascript界面​​以返回字符串。 JSON.parse需要一個字符串,而不是JSON對象。

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

值字符串可能需要引號才能解析它的javascript函數。換句話說:

return "'" + values + "'";