2012-01-10 75 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 ==“结束”,但不知道它有多好。