2012-01-10 77 views
0

我是新來的電暈SDK和Lua語言,我有一些麻煩..科羅娜SDK的Lua network.request延遲

,所以我有這個功能,將網絡請求到我的網站,並通過JSON我收到的數據。這很好。

的問題是,當我叫變量與偵聽器功能之外的數據響應,這似乎是nil。我把一個小計時器跟蹤,如果問題是由於請求和響應之間的時間,它似乎是一個(但我不知道100%)。我不想使用自定義延遲來執行此操作。

有一些方法將腳本暫停,直到聽衆響應,然後繼續執行?我曾嘗試與協程,但我沒能解決它..

local data 

function networkListener(event) 
    if (event.isError) then 
     print("Network error!") 
    else 
    --print ("RESPONSE: " .. event.response) 

     data = json.decode(event.response) 

     print(data[1].start_date) --working great 

    end -- end of else statement 
end 


network.request("http://localhost/mysite/myphpmethod" , "GET", networkListener) 

print(data) -- error: attempt to index upvalue 'data' (a nil value) 

local function printIt() 
    print(data[1].start_date) 
end 

timer.performWithDelay(1000, printIt, 1); -- this works 

回答

1

HTTP調用是異步的,這意味着實際上您的打印(數據)幾乎總是空的,連performWithDelay可能是一個空糟糕的一天。

你就要來設計你的應用程序以這樣的方式,該遊戲代碼繼續在這個特殊的情況下,你會打電話從networkListener爲printit()()內networkListener()(。

這需要一些思考和重新 - 但它並沒有那麼糟糕

+0

耶,好吧,很高興知道。我的第一個解決方案是在網絡監聽器中,但我認爲這是可能的.. 感謝您的迴應:) – troopy 2012-01-11 08:06:33

0

你也可以在向服務器發送請求時調用native.setActivityIndi​​cator(true),並在event.response中停止指示器(native.setActivityIndi​​cator(false))。從服務器的響應,你可以做你的東西。

0

釷最簡單的方法是做請求和流行建立一個新的按鈕,然後做任何你需要做的數據,許多好的網站都這樣做。 你也可以使用event.phase ==「結束」,但不知道它有多好。