Вызовите метод Java из JavaScript и верните значение в JavaScript - PullRequest
0 голосов
/ 25 мая 2018

Есть несколько вопросов SO и других статей о вызове метода класса Java из Javascript, но все они имеют дело с методом java с типом возврата void.

Вот что я пытаюсь достичь: Есть2 строки для отображения в WebView - скажем, Да и Нет .Но они должны быть локализованы, и поэтому я хочу получить строковое значение из метода Java, а не использовать несколько JS для каждой локали.

Вот пример кода: класс Java

onCreate(){
//Some code
contentWebView.addJavascriptInterface(new CalculatorJavaScriptCallInterface(), "calculatorjavascriptcallinterface");
//Some code
}

String localizedString = "";
private class CalculatorJavaScriptCallInterface {
    CalculatorJavaScriptCallInterface() {
    }

    @JavascriptInterface
    public String getLocalizedString(final int stringId) {
        localizedString = getResources().getString(stringId);
        Toast.makeText(getActivity(), "localizedString :: " + localizedString, Toast.LENGTH_SHORT).show();

        return localizedString;
    }
}

Файл Javascript

  function Checkboxpicker(element, options) {
    //Some code
    this.options = $.extend({}, $.fn.checkboxpicker.defaults, options, this.$element.data());
}
  $.fn.checkboxpicker.defaults = {
    //EXISTING STRINGS
    //offLabel: 'No',
    //onLabel: 'Yes',
    offLabel: window.calculatorjavascriptcallinterface.getLocalizedString("Consult.JSSupport.checkbox.selected"),
    onLabel: window.calculatorjavascriptcallinterface.getLocalizedString("Consult.JSSupport.checkbox.notSelected"),
  };

Я получаю пустую строку в качестве вывода при выполнении кода выше.

Вот некоторые примечания:

  1. Этот Javascript используется надлежащим образом, поскольку он работает, если я использую жестко закодированные строки
  2. Соответствующие строки были определены в string.xml
  3. Я пытался использовать calculatorjavascriptcallinterface в регистре Camel и в нижнем регистре, оба
  4. Я пытался использовать window. и без него *1036* для вызова метода Java
  5. Попытался вернуть жестко запрограммированное значение из метода Java - Это работает таким образом

Любые предложения будут оценены.Заранее спасибо!


РЕДАКТИРОВАТЬ Я получаю следующую ошибку, даже если строка присутствует в strings.xml :

No package identifier when getting value for resource number 0x00000000
android.content.res.Resources$NotFoundException: String resource ID #0x0

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Похоже, проблема с получением строки с правильным идентификатором.измените getLocalizedString следующим образом:

@JavascriptInterface
public String getLocalizedString(final String stringId) {
    localizedString = getResources().getString(getResources().getIdentifier(stringId,"string",getContext().getPackageNam‌​e()));
    Toast.makeText(getActivity(), "localizedString :: " + localizedString, Toast.LENGTH_SHORT).show();

    return localizedString;
}
0 голосов
/ 25 мая 2018

1.)

 mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setDomStorageEnabled(true);
    mWebView.addJavascriptInterface(new WebViewInterface(this), "Android");
    mWebView.loadUrl("url or html file path");

2.)

public class WebViewInterface {

    Context mContext;

    WebViewInterface(Context mContext) {
        this.mContext = mContext;
    }

    @JavascriptInterface
    public void performAction(String pro_cat_id) {
          //write your code here to perform any action.
    }

3.)

 <html>
    <head>
        <script type="text/javascript" src="/js/MyJS.js"></script>
    </head>
    <body>
        <button onClick="mClick('1');">Yes</button>
        <button onClick="mClick('0');">No</button>
    </body>
</html>

4.) Javascript: MyJS.js

function mClick(mValue)
{
    Android.performAction(mId);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...