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

我有一个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( "--网络错误-- ", ( res ) )
    else
        print( "结果:" .. ( 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 ( "网络错误 - 下载失败" )
    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 )

非常感谢您提前的帮助!

点赞
用户5675002
用户5675002

在你的代码中,display.loadRemoteImage()在先前的network.request()完成其工作之前被调用。回调networkListener尚未触发,因此未分配item1变量。

你应该在networkListener内部或任何其他你知道URL已成功读取的地方安排loadRemoteImage(),即先前的请求已完成。

2018-03-19 15:50:03
用户7665853
用户7665853
本地函数 networkListener2( event )
        if ( event.isError ) then
            print ( "网络错误 - 下载失败" )
        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

本地函数 networkListener( event )
    local res = json.prettify( event.response )
    local decoded = json.decode( res )
    if ( event.isError ) then
        print( "--网络错误-- ", ( res ) )
    else
        print( "结果: " .. ( 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 )

        -- 位置应由文本对象的中心设置
        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)
2018-03-20 14:09:25