user7665853
user7665853

Reputation: 197

Lua - How to use a local variable (image URL) in a function to print an image (loadRemoteImage)?

I have a code in Lua. In the first function, I get a JSON data and put it in a variable (item1), and am able to print it. In the second function, I would like to use this variable to show the image (because item1 is an image URL). I tried a forward declaration like this and put it in the second function, but it does not work. How can this be solved?

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 )

Thank you very much for your help in advance!

Upvotes: 0

Views: 1197

Answers (2)

user7665853
user7665853

Reputation: 197

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)

Upvotes: 0

Vlad
Vlad

Reputation: 5857

In your code the display.loadRemoteImage() is called before previous network.request() has finished its job. Callback networkListener wasn't triggered yet, so item1 variable is not assigned.

You should schedule loadRemoteImage() from within within networkListener, or anywhere else where you will know that the url was successfully read, i.e. previous request has finished.

Upvotes: 1

Related Questions