2012-02-13 77 views
1

我有一個名爲Locator的類,我使用GeoLocate用戶。該類中有一個名爲「locate()」的靜態方法。然後這個方法調用另一個方法,它將一個名爲「loc」的靜態變量設置爲一個LngLat類的實例。靜態變量顯示爲空

我遇到的問題是,當我調用場景中的第1幀的locate方法,然後嘗試訪問loc變量時,它顯示爲空...但是當它設置後跟蹤loc變量在Locator類中它顯示爲一個對象。

當我這樣做(在第1幀):

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

空被跟蹤。

但是,當我有這個在1幀:

Locator.locate(); 

,然後跟蹤在定位器類的靜態方法結束變量它顯示爲一個對象,預期城市被追蹤。

任何想法?

P.S我做了一個糟糕的工作解釋說,對不起。

在此先感謝。

+4

你確定locate();方法不會超過1幀? (例如1/25秒)你聽任何event.complete或event.located?代碼如何查看locate()函數內部? – 2012-02-13 17:31:55

+0

您可以跟蹤Locator.loc而不是Locator.loc.getCity()。問題可能在getCity中。 – Kodiak 2012-02-13 17:44:33

+1

粘貼你的locate()和getCity()請。 – 2012-02-13 17:54:58

回答

0

此答案是使用什麼您提供的信息的最佳猜測。

根據捕獲位置的上下文,很可能您正在與某些服務器端技術(即充滿座標的數據庫)進行通信。

要達到此目的,您必須使用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()回報。