我是Corona SDK和Lua语言的新手,我有一些麻烦..
所以我有这个功能,它发送网络请求到我的网站,并通过json我收到数据 . 这非常有效 .
问题是,当我使用侦听器函数之外的数据响应调用变量时,它似乎是 nil
. 我放了一个小计时器来跟踪问题是否是因为请求和响应之间的时间而且似乎是那个(但是我想要使用自定义延迟来执行此操作) .
有没有办法暂停脚本,直到侦听器响应然后继续执行?我尝试过coroutines但我无法解决它..
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 回答
最简单的方法是执行请求并弹出一个新按钮,然后执行您需要处理的数据,许多好的网站都会这样做 . 您也可以使用event.phase ==“已结束”,但不确定它有多好 .
您还可以在向服务器发送请求时调用native.setActivityIndicator(true),并在event.response中停止指示符(native.setActivityIndicator(false)) . 所以当你从服务器得到响应时,你可以做你的事情 .
HTTP调用是异步的,这意味着您的打印(数据)几乎总是为空,即使是糟糕的一天,performWithDelay也可能是空的 .
您必须以这样的方式设计您的应用程序:游戏代码在networkListener()中继续(在这种特殊情况下,您将从networkListener()调用printIt() .
这需要一些思考和重新设计,但它并没有那么糟糕 .