help printing a list from JSON data

That is very old pre-Widget 1.0 code.  I’ll send a message to the team that they need to get these samples updated.  Please look in the folder where your Corona SDK is installed.  There will be a SampleCode folder, an in there you should find the latest version of that which uses the latest Widget 2.0 method of building tableViews (which Andrew linked to the docs for you above).

Hi Rob and Andrew, 

Thanks for the help, I figured this was outdated - I’ll look into the new libraries. In the meantime, I think my problem would still carry over so for now we’ll keep working with what I have. 

Andrew, 

This is what I meant when I said pasting the mylist code: 

(excuse the odd formatting)

--import the table view library local tableView = require("tableView") --import the button events library local ui = require("ui") local json = require "json" local dataURL = "http://www.google.com/calendar/feeds/csnfcl6h9k9qh769t6rs105pto@group.calendar.google.com/public/full?alt=json" display.setStatusBar( display.HiddenStatusBar ) --initial values local screenOffsetW, screenOffsetH = display.contentWidth - display.viewableContentWidth, display.contentHeight - display.viewableContentHeight local myList, backBtn, detailScreenText local background = display.newRect(0, 0, display.contentWidth, display.contentHeight) background:setFillColor(77, 77, 77) --setup a destination for the list items local detailScreen = display.newGroup() local detailBg = display.newRect(0,0,display.contentWidth,display.contentHeight-display.screenOriginY) detailBg:setFillColor(255,255,255) detailScreen:insert(detailBg) detailScreenText = display.newText("You tapped item", 0, 0, native.systemFontBold, 24) detailScreenText:setTextColor(0, 0, 0) detailScreen:insert(detailScreenText) detailScreenText.x = math.floor(display.contentWidth/2) detailScreenText.y = math.floor(display.contentHeight/2) detailScreen.x = display.contentWidth --setup functions to execute on touch of the list view items function listButtonRelease( event ) self = event.target local id = self.id print(self.id) detailScreenText.text = "You tapped item ".. self.id transition.to(myList, {time=400, x=display.contentWidth\*-1, transition=easing.outExpo }) transition.to(detailScreen, {time=400, x=0, transition=easing.outExpo }) transition.to(backBtn, {time=400, x=math.floor(backBtn.width/2) + screenOffsetW\*.5 + 6, transition=easing.outExpo }) transition.to(backBtn, {time=400, alpha=1 }) delta, velocity = 0, 0 end function backBtnRelease( event ) print("back button released") transition.to(myList, {time=400, x=0, transition=easing.outExpo }) transition.to(detailScreen, {time=400, x=display.contentWidth, transition=easing.outExpo }) transition.to(backBtn, {time=400, x=math.floor(backBtn.width/2)+backBtn.width, transition=easing.outExpo }) transition.to(backBtn, {time=400, alpha=0 }) delta, velocity = 0, 0 end -- setup some data local data = {} function newDataListener(event) if (event.isError) then print ("Error!") else print ( "RESPONSE: " .. event.response ) data = json.decode(event.response) print("success") print("Hello: " .. data.version) print("Hello: " .. data.encoding) for i,entry in ipairs(data.feed.entry) do data[i] = {} data[i] = entry.title["$t"] -- create the list of items myList = tableView.newList{ data=data, default="listItemBg.png", over="listItemBg\_over.png", onRelease=listButtonRelease, top=topBoundary, bottom=bottomBoundary, backgroundColor={ 255, 255, 255 }, callback=function(row) local t = display.newText(row, 0, 0, native.systemFontBold, 16) t:setTextColor(0, 0, 0) t.x = math.floor(t.width/2) + 12 t.y = 46 return t end } end end end network.request ( dataURL, "GET", newDataListener ) local topBoundary = display.screenOriginY + 40 local bottomBoundary = display.screenOriginY + 0 --Setup the nav bar local navBar = display.newImage("navBar.png", 0, 0, true) navBar.x = display.contentWidth\*.5 navBar.y = math.floor(display.screenOriginY + navBar.height\*0.5) local navHeader = display.newText("My List", 0, 0, native.systemFontBold, 16) navHeader:setTextColor(255, 255, 255) navHeader.x = display.contentWidth\*.5 navHeader.y = navBar.y --Setup the back button backBtn = ui.newButton{ default = "backButton.png", over = "backButton\_over.png", onRelease = backBtnRelease } backBtn.x = math.floor(backBtn.width/2) + backBtn.width + screenOffsetW backBtn.y = navBar.y backBtn.alpha = 0

Hi Marc,

It’s kind of strange that pasting the code like that works and does what you want it to, since it’s creating a new tableView for every step in the loop.  (10 entries in data.feed.entry would mean 10 tableViews…)

  • Andrew

Andrew, Do you have an suggestions on how to store the data outside of the loop? 

In any case, I’m going to start over using the widget 2.0 library. 

Ah, I wasn’t thinking straight. The reason your first version doesn’t work is because, at the time you create the tableView, data hasn’t been populated yet. The network request will take a bit of time to execute, so you need to create the tableView only after the newDataListener is called. That’s why your second method works – because the tableView is created within the listener. You can continue doing that, just don’t put it inside the loop, which doesn’t make sense logically. You could put it in that function, after the loop.

  • Andrew

Andrew, 

Your help here has been extremely valuable! I hope Coronalabs gives special recognition to developers such as yourself who helps us newbies out. I am familiar with the game side of Corona, and while similar, making the business apps has been challenging in a rewarding way. 

Thanks again for all your help. 

We can call this case closed…Until I run into more trouble… :) 

Moving this to a new thread since it’s a different issue.