2013-07-16 1 views
0

Я использую базу данных, чтобы сохранить рекорд. В сцене смена сцены я делаю файл для отображения рекорда. Сначала я делаю базу данных, затем таблицу, а затем извлекаю запись. Убедитесь, что теперь сделанный результат больше, чем существующий в базе данных. Обновите первую существующую запись.Corona Database Работает на симуляторе, но не на устройстве Android, останавливается на предыдущей сцене, используя раскадровку

Его работа прекрасна на симуляторе, но на устройстве он держится на предыдущей сцене и никогда не меняет сцену на файл рекордов.

Это была смена сцены до внедрения базы данных.

local myData = require("myData") 

    ----------------------------------------------------------------------------- 

    --   DATABASE 
    --   SQLite 

    ----------------------------------------------------------------------------- 

      --Include sqlite 
    require "sqlite3" 

    local path = system.pathForFile("myDataBaseASDF.db", system.DocumentsDirectory) 
    db = sqlite3.open(path) 

    --Handle the applicationExit event to close the db 
    local function onSystemEvent(event) 
     if(event.type == "applicationExit") then    
      db:close() 
     end 
    end 


    local tablesetup = [[CREATE TABLE IF NOT EXISTS highScoreClassic (id INTEGER PRIMARY KEY, Time, Taps);]] 
    print("DB Created") 
    db:exec(tablesetup) 


    local dbRows = 0 
    local dbTaps = 0 
    local dbTime = "00:00:00" 

    --print all the table contents 
    for row in db:nrows("SELECT * FROM highScoreClassic WHERE id=1;") do 
     dbRows = dbRows + 1 
     dbTaps = row.Taps 
     dbTime = row.Time 
     print("Row Taken") 
    end 

    function isHighscore() 
     if myData.currentScore > dbTime then 
      return true 
     elseif myData.currentScore == dbTime and myData.taps > dbTaps then 
      return true 
     elseif myData.currentScore == dbTime and myData.taps < dbTaps then 
      return false 
     else return false end 
    end 

    function saveToDataBase() 
     print("updating") 
     local q = [[UPDATE highScoreClassic SET Time=']]..myData.currentScore..[[', Taps=]]..myData.taps..[[ WHERE id=1;]] 
     db:exec(q) 
    end 

    function saveToDataBaseFirstTime() 
     print("inserting") 
     local tablefill =[[INSERT INTO highScoreClassic VALUES (NULL, ']]..myData.currentScore..[[',']]..myData.taps..[['); ]] 
     db:exec(tablefill) 
    end 

    if (dbRows > 0) then 
     if (isHighscore()) then 
      print(dbTime, dbTaps) 
      myData.highScore = true 
      saveToDataBase() 
     else 
      myData.highScore = false 
      print("No HighScore") 
     end 

    else 
     saveToDataBaseFirstTime() 
    end 



    --setup the system listener to catch applicationExit 
    Runtime:addEventListener("system", onSystemEvent) 

ответ

1

Будьте осторожны с материалами, чувствительными к регистру на вашем устройстве. Это не чувствительно к регистру в симуляторе, но оно находится на вашем устройстве.

также убедитесь, что путь для вашего устройства правильный.

0

файл в симуляторе DocumentDirectory не будет включен в ваше устройство. вам нужно снова создать файл.

Смежные вопросы