Есть ли способ извлечь объекты (экземпляры классов) из JavaScript в Android с помощью WebView? - PullRequest
2 голосов
/ 29 июня 2011

Я пытаюсь извлечь объекты и списки, созданные в JavaScript, чтобы использовать их внутри приложения Android. (Мне удалось извлечь отдельные значения.) Я использую метод addJavaScriptInterface для реализации этого.

Внутри test.html у меня есть следующий код скрипта: (Я пробовал без ".slice ()", но тоже не сработало)

function getList(){
var categoryTotals = {};
categoryTotals[0] = 1;
categoryTotals[1] = 2;
categoryTotals[2] = 3;
return categoryTotals.slice();
}

И метод onPageFinished в WebViewClient содержит следующий код:

mWebView.loadUrl("javascript:window.HTMLOUT.callAndroidList(getList());");

Мой 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, является нулевым. Я не особо разбирался с JavaScript, так что я думаю, что возможно это связано с созданием и удалением экземпляров объектов JavaScript.

Не могли бы вы мне помочь? Заранее спасибо.

1 Ответ

1 голос
/ 29 июня 2011
> function getList(){ 
>     var categoryTotals = {};

Это создаст объект, я думаю, вы хотите создать массив, поэтому, возможно, это должно быть:

      var categoryTotals = [];

.

>     categoryTotals[0] = 1;
>     categoryTotals[1] = 2;
>     categoryTotals[2] = 3;
>     return categoryTotals.slice();

Поскольку вы создаете объект с числовыми свойствами, а не массив, у него нет метода slice . Инициализация categoryTotals как массива должна исправить это.

Между прочим, похоже, что нет смысла использовать slice для возврата копии массива. Поскольку categoryTotals не используется ни для чего другого, почему бы просто не вернуть его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...