corona sdk插入行tableview

时间:2015-05-10 07:36:16

标签: lua corona

努力解决问题!我需要在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

1 个答案:

答案 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部分。