Lua - 如何在函数中使用局部变量(图像URL)来打印图像(loadRemoteImage)?

时间:2018-03-19 15:27:29

标签: json variables lua

我在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 )

非常感谢您的帮助!

2 个答案:

答案 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)