我在Lua中有一个代码。在第一个函数中,我获取了一个JSON数据并将其放在变量(item1)中,并且能够打印它。在第二个函数中,我想使用此变量来显示图像(因为item1是图像URL)。我尝试了这样的前向声明并将其放在第二个函数中,但它不起作用。怎么解决这个问题?
local item1
local function networkListener( event )
local res = json.prettify( event.response )
local decoded = json.decode( res )
if ( event.isError ) then
print( "--Network error-- ", ( res ) )
else
print( "Results: " .. ( res ) )
item1 = decoded.results.bindings[0].image.value
print(item1)
local myText = display.newText(sceneGroup, item1, 10, 100, native.systemFont, 26 )
myText:setFillColor( 1, 1, 1 )
end
end
params.body = body
network.request("http://example.com/data.json", "GET", networkListener, params)
local function networkListener2( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
event.target.alpha = 0
transition.to( event.target, { alpha = 1.0 } )
end
print ( "event.response.fullPath: ", event.response.fullPath )
print ( "event.response.filename: ", event.response.filename )
print ( "event.response.baseDirectory: ", event.response.baseDirectory )
end
display.loadRemoteImage(item1, "GET", networkListener2, "item1.png", system.TemporaryDirectory, 50, 50 )
非常感谢您的帮助!
答案 0 :(得分:1)
在您的代码中,display.loadRemoteImage()
在之前的network.request()
完成其工作之前被调用。回调networkListener
尚未触发,因此未分配item1
变量。
您应该在loadRemoteImage()
内或您知道网址已成功阅读的其他任何地方安排networkListener
,即之前的请求已完成。
答案 1 :(得分:0)
local function networkListener2( event )
if ( event.isError ) then
print ( "Network error - download failed" )
else
event.target.alpha = 0
transition.to( event.target, { alpha = 1.0 } )
end
print ( "event.response.fullPath: ", event.response.fullPath )
print ( "event.response.filename: ", event.response.filename )
print ( "event.response.baseDirectory: ", event.response.baseDirectory )
end
local function networkListener( event )
local res = json.prettify( event.response )
local decoded = json.decode( res )
if ( event.isError ) then
print( "--Network error-- ", ( res ) )
else
print( "Results: " .. ( res ) )
item1 = decoded.results.bindings[0].image.value
print(item1)
local myText = display.newText(sceneGroup, item1, 10, 100, native.systemFont, 26 )
myText:setFillColor( 1, 1, 1 )
display.loadRemoteImage(item1, "GET", networkListener2, "item1.png", system.TemporaryDirectory, 50, 50 )
-- Position should be set by the center of the text object
local myText = display.newText(sceneGroup, item1, 10, 300, native.systemFont, 26 )
myText:setFillColor( 1, 1, 1 )
local myText2 = display.newText(sceneGroup, item2, 10, 500, native.systemFont, 26 )
myText:setFillColor( 1, 1, 1 )
end
end
params.body = body
network.request("http://example.com/data.json", "GET", networkListener, params)