Corona SDK Lua network.request延迟

时间:2012-01-10 11:06:09

标签: lua corona

我是Corona SDK和Lua语言的新手,我遇到了一些麻烦......

所以我有这个功能,它发送网络请求到我的网站,并通过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 

3 个答案:

答案 0 :(得分:1)

HTTP调用是异步的,这意味着您的打印(数据)几乎总是为空,即使在糟糕的一天,performWithDelay也可能为空。

您必须设计应用程序,使游戏代码在networkListener()中继续(在这种特殊情况下,您将从networkListener()调用printIt()。

这需要一些思考和重新设计,但它并没有那么糟糕。

答案 1 :(得分:0)

您还可以在向服务器发送请求时调用native.setActivityIndi​​cator(true),并在event.response中停止指示符(native.setActivityIndi​​cator(false))。所以当你从服务器得到响应时,你可以做你的事情。

答案 2 :(得分:0)

最简单的方法是执行请求并弹出一个新按钮,然后执行您需要处理的数据,许多好的网站都会这样做。 你也可以使用event.phase =="结束"但不确定它有多好。