Есть несколько вопросов 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"),
};
Я получаю пустую строку в качестве вывода при выполнении кода выше.
Вот некоторые примечания:
- Этот Javascript используется надлежащим образом, поскольку он работает, если я использую жестко закодированные строки
- Соответствующие строки были определены в
string.xml
- Я пытался использовать
calculatorjavascriptcallinterface
в регистре Camel и в нижнем регистре, оба - Я пытался использовать
window.
и без него *1036* для вызова метода Java - Попытался вернуть жестко запрограммированное значение из метода Java - Это работает таким образом
Любые предложения будут оценены.Заранее спасибо!
РЕДАКТИРОВАТЬ Я получаю следующую ошибку, даже если строка присутствует в strings.xml :
No package identifier when getting value for resource number 0x00000000
android.content.res.Resources$NotFoundException: String resource ID #0x0