【发布时间】:2018-05-25 06:34:59
【问题描述】:
关于从 Javascript 调用 Java 类方法的 SO 问题和其他文章很少,但它们都处理返回类型为 void 的 java 方法。
这是我想要实现的目标: 在 WebView 中显示 2 个字符串 - 比如说 Yes 和 No。但是它们需要本地化,因此我想从 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驼峰式和小写式都有 - 我试过有没有
window.调用 Java 方法 - 尝试从 Java 返回硬编码值 方法 - 它是这样工作的
任何建议将不胜感激。提前致谢!
编辑 即使 strings.xml 中存在字符串,我也会收到以下错误:
No package identifier when getting value for resource number 0x00000000
android.content.res.Resources$NotFoundException: String resource ID #0x0
【问题讨论】:
-
您可能需要进行异步调用
-
你有
setJavaScriptEnabled吗?你的getLocalizedString被叫到了吗? -
@sagar - 是的。如何验证?请查看问题中的重要更新。
-
@brk - 你能详细说明一下吗?
-
@GAMA 您的 Toast 消息是否显示正确的字符串?
标签: javascript android android-webview