addJavascriptInterface не возвращает строковое значение Android - PullRequest
0 голосов
/ 22 ноября 2010

Я использую следующий код для извлечения строковой переменной в моем файле JavaScript в Android:

Это мой файл JavaScript:

<script language="javascript">

EDIT:
clsVariable = "vikrant";

function refuseClick(){
clsVariable = "vikrant";
refuse.performClick();
document.getElementById("no").value = "Refuse";
}

</script>

<button type="button" id="no" onClick="refuseClick();">Je refuse</button>

</div>
</body>
</html>

В моем классе Android я пишуследующий метод по нажатию кнопки.Это событие нажатия кнопки, которое я вызываю из файла javascript:

    refuse.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View v) {
      Log.v(LOG_TAG, "variable=" + clsVariable);  //This shows me null
 }
 });
 wbvw = (WebView) findViewById (R.id.webvw);

 wbvw.setWebViewClient(new HelloWebViewClient());
    wbvw.getSettings().setJavaScriptEnabled(true);

    WebSettings ws = wbvw.getSettings();
    ws.setJavaScriptEnabled(true);
    wbvw.addJavascriptInterface(clsVariable, "clsVariable");
    wbvw.loadUrl("http://www.sbc.co.in/projects/AndroidTest.html");
}

Я новичок в этой платформе, а также в javascripting.

Что я делаю неправильно?Кто-нибудь может помочь?

Спасибо заранее.

1 Ответ

6 голосов
/ 22 ноября 2010

Похоже, вы неправильно используете addJavascriptInterface ().Метод позволяет вам выставить некоторый объект Java в JavaScript.Затем вы можете вызывать методы объекта с использованием javascript, и эти вызовы будут переданы «реальному» java-объекту.Например, вы можете объявить такой вложенный класс для доступа к полю Java:

class ClsAccessor {
     public void setValue(String value){
           YourOuterClassName.this.clsVariable = value;
     }
}

Затем передать экземпляр класса в метод addJavascriptInterface ():

wbvd.addJavaScriptInterface(new ClsAccessor(), "accessor");

Затем, чтобыустановите значение в поле вашего класса, вам нужно вызвать метод setValue () для accessor объекта из javascript (например, в обработчике кликов):

accessor.setValue('vikrant');

Это приведет к вызову java 'setValue() 'и ваша переменная поля будет установлена.

Обратите внимание, что фрагменты могут быть не точными, я набираю их прямо из моей головы :) Но вы должны понять принцип.Надеюсь, это поможет.

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