关于从Javascript调用Java类方法的SO问题和其他文章很少,但它们都处理返回类型为void
的java方法。
这是我想要实现的目标: WebView中有2个字符串显示 - 例如是和否。但是它们需要本地化,因此我想从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"),
};
当我在代码上面运行时,我得到空白字符串作为输出。
以下是一些注释:
string.xml
calculatorjavascriptcallinterface
骆驼案和小写都window.
调用Java方法任何建议将不胜感激。提前谢谢!
修改 即使字符串出现在 strings.xml 中,我也会收到以下错误:
No package identifier when getting value for resource number 0x00000000
android.content.res.Resources$NotFoundException: String resource ID #0x0
答案 0 :(得分:1)
看起来像获取具有正确ID的String的问题。按如下方式更改getLocalizedString
:
@JavascriptInterface
public String getLocalizedString(final String stringId) {
localizedString = getResources().getString(getResources().getIdentifier(stringId,"string",getContext().getPackageName()));
Toast.makeText(getActivity(), "localizedString :: " + localizedString, Toast.LENGTH_SHORT).show();
return localizedString;
}
答案 1 :(得分:0)
1。)
{1,2,3,4,5,6,7,8}
2)。
{2,3,4,5,6,7,8,9}
3。)
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.addJavascriptInterface(new WebViewInterface(this), "Android");
mWebView.loadUrl("url or html file path");
4。)javascript:MyJS.js
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.
}