静态变量显示为Null

时间:2012-02-13 17:23:30

标签: flash actionscript-3

我有一个名为Locator的类,我用它来GeoLocate用户。该类中有一个名为“locate()”的静态方法。然后,此方法调用另一个方法,该方法将名为“loc”的静态变量设置为LngLat类的实例。

我遇到的问题是,当我在场景中的第1帧调用locate方法,然后尝试访问它显示为null的loc变量时......但是当我在设置后跟踪loc变量时它显示为对象的Locator类。

当我这样做时(在第1帧):

Locator.locate();
trace(Locator.loc.getCity());

null被追踪。

但是当我在第1帧中有这个时:

Locator.locate();

然后在它显示为对象的Locator类中的静态方法的末尾跟踪变量,并按预期跟踪城市。

有什么想法吗?

P.S我做了很好的解释,抱歉。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

使用您提供的 little 信息,这个答案是最好的猜测。

根据捕获位置的上下文,您可能会与某些服务器端技术(即一个充满坐标的数据库)进行通信。

要实现这一目标,您必须使用URLLoader

初始化URLLoader的实例并尝试从第三方收集信息时,将在异步的时间收到所请求的信息。这意味着当闪存接收到您之后的数据时等待调用的函数可以在不久的将来被调用,但不能立即调用。

这是一个实验:

var data:Object = null;
var loader:URLLoader;

function test():void
{
    loader = new URLLoader();
    var request:URLRequest = new URLRequest("https://projectavian.com/files/example.php");

    loader.load(request);
    loader.addEventListener(Event.COMPLETE, _done);
    stage.addEventListener(Event.ENTER_FRAME, _check);
}


function _done(e:Event):void
{
    data = e.target.data;
    trace(data);

    loader.removeEventListener(Event.COMPLETE, _done);
    stage.removeEventListener(Event.ENTER_FRAME, _check);
}

function _check(e:Event):void
{
    trace(data);
}


test();
trace(data); // This will always be null even after all the work above.

如果您执行此操作,则会注意到data始终是null

我的猜测是您的Locator.locate()需要一些时间来收集所需的信息,然后为任何Locator.loc.getCity()返回分配一个值。