努力解决问题!我需要在tableview中插入数据库查询的结果。问题是我无法插入数据,因为当我这样做时结果是零...如果我尝试插入固定数据(如一般字符串“你好”)它的工作原理!有人能帮我吗?非常感谢。
function listatornei()
local dataURL = "http://www.lineitup.it/torneiopen.php?me="..usrUsr
numtornei=0
local function listaListener(event)
if event.phase=="ended" then
if (event.isError) then
print("Connection not available")
else
id_tor = {} -- array to store query field1
usr_tor = {} -- array to store query field2
local tab = event.response -- read json data
tab = json.decode( tab ) -- tabel conversion
if #tab > 0 then
for i=1, #tab do
id_tor[i] = tab[i]["idt"]
usr_tor[i] = tab[i]["gioc1_usr"]
numtornei=i
end
-- Listen for tableView events
local function tableViewListener( event )
local phase = event.phase
print( event.phase )
end
-- Handle row rendering
local function onRowRender( event )
local phase = event.phase
local row = event.row
local id = row.index
row.bg = display.newRect( 0, 0, display.contentWidth, 60 )
row.bg.anchorX = 0
row.bg.anchorY = 0
row.bg:setFillColor( 1, 1, 0 )
row:insert( row.bg )
row.idt = display.newText(id_tor[i], 0, 0, native.systemFontBold, 40 )
--row.idt = display.newText("pippo", 0, 0, native.systemFontBold, 40 )
row.idt.anchorX = 0
row.idt.anchorY = 0.5
row.idt:setFillColor( 0 )
row.idt.y = 20
row.idt.x = 42
row.usr = display.newText( usr_tor[i], 0, 0, native.systemFont, 40 )
--row.usr = display.newText( "pluto", 0, 0, native.systemFont, 40 )
row.usr.anchorX = 0
row.usr.anchorY = 0.5
row.usr:setFillColor( 0.5 )
row.usr.y = 20
row.usr.x = 250
row:insert( row.idt )
row:insert( row.usr )
end
-- Handle row's becoming visible on screen
local function onRowUpdate( event )
local row = event.row
print( "Row:", row.index, " is now visible" )
end
-- Handle touches on the row
local function onRowTouch( event )
local phase = event.phase
if "press" == phase then
print( "Touched row:", event.target.index )
end
end
-- Create a tableView
local tableView = widget.newTableView
{
top = 100,
width = 620,
height = 410,
--maskFile = "formlog1.png",
listener = tableViewListener,
onRowRender = onRowRender,
onRowTouch = onRowTouch,
}
for i = 1, numtornei do
local isCategory = false
local rowHeight = 60
local rowColor =
{
default = { 255, 255, 0 },
}
local lineColor = { 220, 220, 220 }
-- Make some rows categories
if i == 25 or i == 50 then
isCategory = true
rowHeight = 24
rowColor =
{
default = { 150, 160, 180, 200 },
}
end
-- Insert the row into the tableView
tableView:insertRow
{
isCategory = isCategory,
rowHeight = rowHeight,
rowColor = rowColor,
lineColor = lineColor,
}
end
end
end
end
end
network.request( dataURL, "GET", listaListener )
end
答案 0 :(得分:0)
您需要检查从数据库返回的数据。如果数据库中的数据为零,则不要插入数据。在onRowRender函数中,您应该测试每一位数据,以确保在尝试创建对象之前它不是nil。
此外,您还有潜在的范围问题。 onRowRender()由表格行在屏幕上显示的事件驱动。它不是在for循环中同步调用的。带插入的循环可能会在第一行onRowRender()完成之前完成。您还引用变量" i"在onRowRender()里面,当行渲染时将是零。如果数据库行与tableView行始终处于1对1关系(即没有类别行),则可以使用行ID在数据表中查找数据。如果没有,您应该在插入行时使用传入数据的形式。请参阅:https://coronalabs.com/blog/2014/03/04/tutorial-advanced-tableview-tactics/并查看Passable Parameters部分。