Gwt 全球化是未定义的,onPhoneGapAvailable不';t火

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

我们正在尝试使用GWT、phonegap 2.4、gwtphonegap 2.4开发phonegap应用程序。现在我们正在用安卓4.2测试它。我们已经使用了地理定位功能,它在浏览器和移动设备中很有魅力,但是当我们试图使用全球化来获取系统的区域设置时,它就不起作用了。onphnegapavaailable事件从不触发,如果我们直接调用getGlobalization,它会说它未定义

我们从onPhoneGapAvailable事件调用此方法:

  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中阅读全球化,但它不起作用。同样的消息:“无法阅读未定义的属性全球化”我不明白发生了什么。