有没有办法使用WebView将JavaScript中的对象(类实例)提取到Android?

有没有办法使用WebView将JavaScript中的对象(类实例)提取到Android?,javascript,android,android-webview,Javascript,Android,Android Webview,我试图提取JavaScript中创建的对象和列表,以便在Android应用程序中使用它们。(我成功地提取了单个值。)我正在使用addJavaScriptInterface方法来实现这一点 在test.html中,我有以下脚本代码: (我尝试过不使用“.slice()”,但也不起作用) WebViewClient的onPageFinished方法包含以下代码: mWebView.loadUrl("javascript:window.HTMLOUT.callAndroidList(getList()

我试图提取JavaScript中创建的对象和列表,以便在Android应用程序中使用它们。(我成功地提取了单个值。)我正在使用addJavaScriptInterface方法来实现这一点

在test.html中,我有以下脚本代码: (我尝试过不使用“.slice()”,但也不起作用)

WebViewClient的onPageFinished方法包含以下代码:

mWebView.loadUrl("javascript:window.HTMLOUT.callAndroidList(getList());");
My JavaScriptInterface具有以下功能:

public void callAndroidList(final List list){
        myList = list;
        Log.d("ListTest" , "LIST 1 >>>>>>>>>>>>> " + ListTest.myList.get(0));
        Log.d("ListTest" , "LIST 2 >>>>>>>>>>>>> " + ListTest.myList.get(1));
        Log.d("ListTest" , "LIST 3 >>>>>>>>>>>>> " + ListTest.myList.get(2));
    }
当我运行这段代码时,我得到了NullPointerException,表示callAndroidList的参数list为null。我没有太多地处理JavaScript,所以我认为这可能与创建和删除JavaScript对象实例有关

你能帮我吗?提前谢谢

> function getList(){ 
>     var categoryTotals = {};
这将创建一个对象,我想你的意思是创建一个数组,所以它可能应该是:

      var categoryTotals = [];

由于您创建的是具有数值属性的对象,而不是数组,因此它没有切片方法。将categoryTotals初始化为数组应该可以解决这个问题


顺便说一句,使用slice返回数组副本似乎没有任何意义。既然CategoryTols不用于任何其他用途,为什么不直接返回它呢?

我在将其更改为括号后尝试了它,但它仍然不起作用。我第一次尝试不使用.slice()并一直给我NullPointerException。我想如果我能传递真实的对象而不仅仅是一个参考,我就能解决这个问题;所以,我尝试了slice方法,但效果不好。无论是“返回”categoryTotals还是categoryTotals.slice(),返回的值都将是对对象的引用。是的,我想这就是发生的情况。我想我别无选择,只能将它们更改为字符串值并传递它们。谢谢你的时间。你可以考虑返回一个字符串-JavaScript有一个内置的JSON.String。本质上,您将序列化响应,以便稍后将其转换回对象或数组。
      var categoryTotals = [];
>     categoryTotals[0] = 1;
>     categoryTotals[1] = 2;
>     categoryTotals[2] = 3;
>     return categoryTotals.slice();