0

我试图将拨动开关设置为禁用并停止地理定位程序......

当 geo 设置为新的 Geolocation 时出现空对象错误 - 我在这里错过了什么?

        private function gogeo():void
        {
            if (Geolocation.isSupported)
            {
                var geo:Geolocation = new Geolocation();
                geo.setRequestedUpdateInterval(2000);
                geo.addEventListener(GeolocationEvent.UPDATE, geolocationUpdateHandler);
            }
            else
            {
                trace("No geolocation support.");
            }   
        }



        private function geolocationUpdateHandler(event:GeolocationEvent):void
        {
            trace("lat:" + event.latitude.toString() + " - ");
            trace("long:" + event.longitude.toString() + "° - ");
            trace("Accuracy:" + event.horizontalAccuracy.toString() + " m");

        }
        protected function toggleswitch1_changeHandler(event:Event):void
        {

            if (toggleswitch1.selected == false) {
            trace("The function should STOP"); 

            geo.removeEventListener(GeolocationEvent.UPDATE, geolocationUpdateHandler);
            geo = null;

        } else {
            trace("The function should RESTART");

            geo = new Geolocation();
            geo.addEventListener(GeolocationEvent.UPDATE, geolocationUpdateHandler);
        }
        }
4

1 回答 1

1

在函数之外定义地理:

private var geo:GeoLocation;

private function gogeo():void
{
    if (Geolocation.isSupported)
    {
        geo = new Geolocation();
        geo.setRequestedUpdateInterval(2000);
        geo.addEventListener(GeolocationEvent.UPDATE, geolocationUpdateHandler);
    }
    else
    {
        trace("No geolocation support.");
    }   
}

变量仅在其“范围”内可用 - 例如:如果您在函数内定义变量,则只能在该函数内使用

编辑:

要将地理定义为全局:

在您的应用程序的顶层(即在主 mxml 文件中),添加一个公共声明:

public var geo:GeoLocation;

然后使用以下命令从您应用中的任何位置访问它:

(FlexGlobals.topLevelApplication as MyAppClass).geo

而不仅仅是“地理”;其中 MyAppClass 是您的应用程序的名称(即:您的主 mxml 类的名称)

于 2013-02-01T20:41:09.137 回答