Gwt 全球化是未定义的,onPhoneGapAvailable不';t火
我们正在尝试使用GWT、phonegap 2.4、gwtphonegap 2.4开发phonegap应用程序。现在我们正在用安卓4.2测试它。我们已经使用了地理定位功能,它在浏览器和移动设备中很有魅力,但是当我们试图使用全球化来获取系统的区域设置时,它就不起作用了。onphnegapavaailable事件从不触发,如果我们直接调用getGlobalization,它会说它未定义 我们从onPhoneGapAvailable事件调用此方法:Gwt 全球化是未定义的,onPhoneGapAvailable不';t火,gwt,cordova,mgwt,Gwt,Cordova,Mgwt,我们正在尝试使用GWT、phonegap 2.4、gwtphonegap 2.4开发phonegap应用程序。现在我们正在用安卓4.2测试它。我们已经使用了地理定位功能,它在浏览器和移动设备中很有魅力,但是当我们试图使用全球化来获取系统的区域设置时,它就不起作用了。onphnegapavaailable事件从不触发,如果我们直接调用getGlobalization,它会说它未定义 我们从onPhoneGapAvailable事件调用此方法: private void detectLangua
private void detectLanguage() {
//if it is in a mobile take the language from the OS
if (phoneGap.isPhoneGapDevice()) {
Window.alert("detecting language");
phoneGap.getGlobalization().getLocaleName(new GlobalizationCallback<CLocale, GlobalizationError>() {
@Override
public void onSuccess(CLocale s) {
...
}
@Override
public void onFailure(GlobalizationError f) {
....
}
});
}
}
private void detectLanguage(){
//如果是在移动设备中,则从操作系统获取该语言
if(phoneGap.isPhoneGapDevice()){
窗口警报(“检测语言”);
phoneGap.getGlobalization().getLocaleName(新的GlobalizationCallback()){
@凌驾
成功时的公共无效(CLocale s){
...
}
@凌驾
public void onFailure(GlobalizationError f){
....
}
});
}
}
之后:
initializePhoneGap()
我们的html:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title></title>
<script type="text/javascript" language="javascript" src="js/cordova-2.4.0.js"></script>
<meta name="gwt:property" content="locale=en">
<script src="js/init.js"></script>
<script type="text/javascript" language="javascript" src="asdf.mobileclient/asdf.mobileclient.nocache.js"></script>
<script type="text/javascript">
document.addEventListener("deviceready", (function(){ PhoneGap.available = true;}), false);
</script>
</head>
<body>
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
</body>
</html>
addEventListener(“deviceready”,(function(){PhoneGap.available=true;}),false);
应用程序(config.xml)中的配置设置了以下插件:
<plugin name="Globalization" value="org.apache.cordova.Globalization"/>
提前感谢。我从未使用过gwtphonegap,所以我不知道initializePhoneGap是如何工作的,OnPhoneGaPavaailable事件也不知道,但我确信
document.addEventListener(“deviceready”,(function(){PhoneGap.available=true;}),false)代码>在cordova完全加载后触发,因此在您的情况下PhoneGap.available=true代码>设备准备就绪时
可能您必须检查PhoneGap.available
是否为true
,而不是指望onphonegapavaailable事件。您始终需要等待phonegapavaailable事件。GWT Phonegap在“deviceready”事件上注册,随后将触发GWT事件
在没有deviceready的情况下访问API的任何部分都不起作用。我发现GWT 2.5和phonegap 3.2没有处理PhonegapAvailable事件。我的工作是直接处理devicerady
事件
因此,在onModuleLoad()
中,我有:
phoneGap = GWT.create(PhoneGap.class);
phoneGap.initializePhoneGap();
setupOnDeviceReady(); // This needs to follow the call to initializePhoneGap()
其中setupOnDeviceReady()
是:
private native void setupOnDeviceReady() /*-{
var self = this;
var cb = function() {self.@com.myapp.client.EntryClass::onDeviceReady()();};
$doc.addEventListener("deviceready", $entry(cb), false);
}-*/;
和onDeviceReady()
包含任何需要初始化phonegap的代码(即,onPhoneGapAvailable
处理程序中会出现的任何代码。onPhoneGapAvailable触发的位置?没有调用deviceready回调?我假设是phonegap.initializePhoneGap()激发它,我错了吗?这真的很奇怪。我已经前进了,现在我试图在事件PhoneGaPavaailable中阅读全球化,但它不起作用。同样的消息:“无法阅读未定义的属性全球化”我不明白发生了什么。