Help me - Load remote image to slideview

Hi team,

I try to load remote image to slideView but i got a problem. Here my code (i edited file slideview.lua)

for i = 1,#imageSet do
– download image from server
local file = i…".jpg"
network.download(imageSet[i], “GET”, networkListener, file, system.DocumentsDirectory )
local p = display.newImage(file,system.DocumentsDirectory)
local h = viewableScreenH-(top+bottom)

My problem is: Failed to find image
I see my bug is when program run, network download is asynchronous. And image didn’t download before call display.newImage ()
Can everybody help me how to detect image dowloaded before continue run Display.newImage …

Thank so much
[import]uid: 167226 topic_id: 29590 reply_id: 329590[/import]

Hi,

You’ll want to access the retrieved image within the “networkListener” function, which you’re missing.

Check out the API docs for an example.

Essentially, you’ll want to add in a networkListener function and then do whatever it is that you want to do with the retrieved image within that function.

Incidentally, you should use the < lua >< /lua > tags around your post so that your code can be nicely formatted.

Ali [import]uid: 10499 topic_id: 29590 reply_id: 118817[/import]

My problem with display.loadRemoteImage is

  • I didn’t remember image downloaded. Because I didn’t want load image in next load
  • I didn’t use display.loadRemoteImage with slideView.

Here my code. Anyboy can help me
[lua]-- slideView.lua

– Version 1.0

– Copyright © 2010 Corona Labs Inc. All Rights Reserved.

– Permission is hereby granted, free of charge, to any person obtaining a copy of
– this software and associated documentation files (the “Software”), to deal in the
– Software without restriction, including without limitation the rights to use, copy,
– modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
– and to permit persons to whom the Software is furnished to do so, subject to the
– following conditions:

– The above copyright notice and this permission notice shall be included in all copies
– or substantial portions of the Software.

– THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
– INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
– PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
– FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
– OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
– DEALINGS IN THE SOFTWARE.

module(…, package.seeall)

local screenW, screenH = display.contentWidth, display.contentHeight
local viewableScreenW, viewableScreenH = display.viewableContentWidth, display.viewableContentHeight
local screenOffsetW, screenOffsetH = display.contentWidth - display.viewableContentWidth, display.contentHeight - display.viewableContentHeight

local imgNum = nil
local images = nil
local touchListener, nextImage, prevImage, cancelMove, initImage
local background
local imageNumberText, imageNumberTextShadow

function networkListener( event )
if ( event.isError ) then
print( “erro de internet” )
else
print( “download image” )
end
print ( "RESPONSE: " … event.response )
end

function new( imageSet, slideBackground, top, bottom )
local pad = 20
local top = top or 0
local bottom = bottom or 0

local g = display.newGroup()

if slideBackground then
background = display.newImage(slideBackground, 0, 0, true)
else
background = display.newRect( 0, 0, screenW, screenH-(top+bottom) )
background:setFillColor(0, 0, 0)
end
g:insert(background)

images = {}
for i = 1,#imageSet do
– download image tu server
local file = i…".jpg"
network.download(imageSet[i], “GET”, networkListener, file, system.DocumentsDirectory )
local p = display.newImage(file,system.DocumentsDirectory)
local h = viewableScreenH-(top+bottom)
if p.width > viewableScreenW or p.height > h then
if p.width/viewableScreenW > p.height/h then
p.xScale = viewableScreenW/p.width
p.yScale = viewableScreenW/p.width
else
p.xScale = h/p.height
p.yScale = h/p.height
end
end
g:insert§

if (i > 1) then
p.x = screenW*1.5 + pad – all images offscreen except the first one
else
p.x = screenW*.5
end

p.y = h*.5

images[i] = p
end

local defaultString = "1 of " … #images

local navBar = display.newGroup()
g:insert(navBar)

local navBarGraphic = display.newImage(“navBar.png”, 0, 0, true)
navBar:insert(navBarGraphic)
navBarGraphic.x = viewableScreenW*.5
navBarGraphic.y = 0

imageNumberText = display.newText(defaultString, 0, 0, native.systemFontBold, 14)
imageNumberText:setTextColor(255, 255, 255)
imageNumberTextShadow = display.newText(defaultString, 0, 0, native.systemFontBold, 14)
imageNumberTextShadow:setTextColor(0, 0, 0)
navBar:insert(imageNumberTextShadow)
navBar:insert(imageNumberText)
imageNumberText.x = navBar.width*.5
imageNumberText.y = navBarGraphic.y
imageNumberTextShadow.x = imageNumberText.x - 1
imageNumberTextShadow.y = imageNumberText.y - 1

navBar.y = math.floor(navBar.height*0.5)

imgNum = 1

g.x = 0
g.y = top + display.screenOriginY

function touchListener (self, touch)
local phase = touch.phase
print(“slides”, phase)
if ( phase == “began” ) then
– Subsequent touch events will target button even if they are outside the contentBounds of button
display.getCurrentStage():setFocus( self )
self.isFocus = true

startPos = touch.x
prevPos = touch.x

transition.to( navBar, { time=200, alpha=math.abs(navBar.alpha-1) } )

elseif( self.isFocus ) then

if ( phase == “moved” ) then

transition.to(navBar, { time=400, alpha=0 } )

if tween then transition.cancel(tween) end

print(imgNum)

local delta = touch.x - prevPos
prevPos = touch.x

images[imgNum].x = images[imgNum].x + delta

if (images[imgNum-1]) then
images[imgNum-1].x = images[imgNum-1].x + delta
end

if (images[imgNum+1]) then
images[imgNum+1].x = images[imgNum+1].x + delta
end

elseif ( phase == “ended” or phase == “cancelled” ) then

dragDistance = touch.x - startPos
print("dragDistance: " … dragDistance)

if (dragDistance < -40 and imgNum < #images) then
nextImage()
elseif (dragDistance > 40 and imgNum > 1) then
prevImage()
else
cancelMove()
end

if ( phase == “cancelled” ) then
cancelMove()
end

– Allow touch events to be sent normally to the objects they “hit”
display.getCurrentStage():setFocus( nil )
self.isFocus = false

end
end

return true

end

function setSlideNumber()
print(“setSlideNumber”, imgNum … " of " … #images)
imageNumberText.text = imgNum … " of " … #images
imageNumberTextShadow.text = imgNum … " of " … #images
end

function cancelTween()
if prevTween then
transition.cancel(prevTween)
end
prevTween = tween
end

function nextImage()
tween = transition.to( images[imgNum], {time=400, x=(screenW*.5 + pad)*-1, transition=easing.outExpo } )
tween = transition.to( images[imgNum+1], {time=400, x=screenW*.5, transition=easing.outExpo } )
imgNum = imgNum + 1
initImage(imgNum)
end

function prevImage()
tween = transition.to( images[imgNum], {time=400, x=screenW*1.5+pad, transition=easing.outExpo } )
tween = transition.to( images[imgNum-1], {time=400, x=screenW*.5, transition=easing.outExpo } )
imgNum = imgNum - 1
initImage(imgNum)
end

function cancelMove()
tween = transition.to( images[imgNum], {time=400, x=screenW*.5, transition=easing.outExpo } )
tween = transition.to( images[imgNum-1], {time=400, x=(screenW*.5 + pad)*-1, transition=easing.outExpo } )
tween = transition.to( images[imgNum+1], {time=400, x=screenW*1.5+pad, transition=easing.outExpo } )
end

function initImage(num)
if (num < #images) then
images[num+1].x = screenW*1.5 + pad
end
if (num > 1) then
images[num-1].x = (screenW*.5 + pad)*-1
end
setSlideNumber()
end

background.touch = touchListener
background:addEventListener( “touch”, background )


– Define public methods

function g:jumpToImage(num)
local i
print(“jumpToImage”)
print("#images", #images)
for i = 1, #images do
if i < num then
images[i].x = -screenW*.5;
elseif i > num then
images[i].x = screenW*1.5 + pad
else
images[i].x = screenW*.5 - pad
end
end
imgNum = num
initImage(imgNum)
end

function g:cleanUp()
print(“slides cleanUp”)
background:removeEventListener(“touch”, touchListener)
end

return g
end[/lua] [import]uid: 167226 topic_id: 29590 reply_id: 118818[/import]